Por que posso criar uma tabela com PRIMARY KEY em uma coluna anulável?
O código a seguir cria uma tabela sem gerar erros:
CREATE TABLE test(
ID INTEGER NULL,
CONSTRAINT PK_test PRIMARY KEY(ID)
)
Note que não consigo inserir um NULL, como esperado:
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 que posso criar uma tabela com uma definição auto-contraditória? A coluna ID é declarada explicitamente como NULLable e implicitamente não é anulável, como parte da PRIMARY KEY. Isso faz sentido?
Edit: não seria melhor se este autocontraditório CREATE TABLE simplesmente falhasse ali mesmo?