Sí, este es el comportamiento esperado en MySQL (de hecho, también en ANSI-92). NULL
los valores no se tratan como valores iguales en claves únicas y las claves primarias no pueden contener NULL
valores por definición.
(http://www.contrib.andrew.cmu.edu /~shadow/sql/sql1992.txt )
Dado que tiene la restricción de clave externa en la columna anulable, sugeriría agregar un valor ficticio a las tablas principales que indique el hecho de que el elemento principal es irrelevante o no está determinado (los registros donde ID =0 tal vez) y agregue el NOT NULL
restricción a la columna. (Además, puede agregar el valor ficticio como DEFAULT
).