¿Por qué puedo crear una tabla con CLAVE PRINCIPAL en una columna que admite nulos?
El siguiente código crea una tabla sin generar ningún error:
CREATE TABLE test(
ID INTEGER NULL,
CONSTRAINT PK_test PRIMARY KEY(ID)
)
Tenga en cuenta que no puedo insertar un valor NULL, como se esperaba:
INSERT INTO test
VALUES(1),(NULL)
ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null).
********** Error **********
ERROR: null value in column "id" violates not-null constraint
SQL state: 23502
Detail: Failing row contains (null).
¿Por qué puedo crear una tabla con una definición autocontradictoria? La columna de ID se declara explícitamente como NULLable, y es implícitamente no anulable, como parte de la CLAVE PRIMARIA. ¿Tiene sentido?
Edit: ¿no sería mejor si esta autocomplaciente CREATE TABLE simplemente fallara allí?