NULL permitido en la clave primaria: ¿por qué y en qué DBMS?

Además de mi pregunta"¿Por qué usar ´no clave primaria nula´ en TSQL?"...

Como entendí de otras discusiones, algunos RDBMS (por ejemplo, SQLite,MySQL) permiten NULL "único" en la clave primaria.

¿Por qué está permitido y cómo puede ser útil?

Antecedentes: creo que es beneficioso para la comunicación con colegas y profesionales de bases de datos conocer las diferencias en conceptos fundamentales, enfoques y sus implementaciones en diferentes DBMS.

NotasMySQL se rehabilita y vuelve a la lista "NOT NULL PK".Se ha agregado SQLite (gracias a Paul Hadfield) a la lista "NULL PK":

A los efectos de determinar la unicidad de los valores de la clave primaria,Los valores NULL se consideran distintos de todos los demás valores, incluidos otros NULL.

Si una instrucción INSERT o UPDATE intenta modificar el contenido de la tabla para que dos o más filas presenten valores de clave primaria idénticos, es una violación de restricción. De acuerdo con el estándar SQL, PRIMARY KEY siempre debe implicar NOT NULL. Desafortunadamente, debido a una supervisión de codificación de larga data, este no es el caso en SQLite.

A menos que la columna sea una CLAVE PRIMARIA INTEGRALSQLite permite valores NULL en una columna PRIMARY KEY. Podríamos cambiar SQLite para que se ajuste al estándar (y podríamos hacerlo en el futuro), pero para cuando se descubrió la supervisión, SQLite estaba en uso tan amplio que temíamos romper el código heredado si solucionábamos el problema.

Entonces, por ahora, hemos elegido continuar permitiendo NULLs en las columnas PRIMARY KEY. Sin embargo, los desarrolladores deben ser conscientes de que podemos cambiar SQLite para cumplir con el estándar SQL en el futuro y debemos diseñar nuevos programas en consecuencia.

SQL como lo entiende SQLite: CREATE TABLE

Respuestas a la pregunta(5)

Su respuesta a la pregunta