Porque cualquier operador de comparación sobre NULL
aparecer en un filtro sql debería (y lo hace) hacer que la fila no se seleccione.
Debe usar el operador seguro nulo <=>
para comparar con la columna que contiene NULL
valores y otros NOT NULL
valor pero <=>
devolverá 1
cuando ambos operandos son NULL
porque NULL
nunca se considera igual a NULL
.
Este es un ejemplo de una situación en la que el operador seguro nulo es útil:
Tienes una mesa:
Phones
----
Number
CountryCode (can be NULL)
Y quieres seleccionar todos los números de teléfono que no sean de España (código de país 34). El primer intento suele ser:
SELECT Number FROM Phones WHERE CountryCode <> 34;
Pero observa que hay teléfonos sin código de país (valor NULL) que no están en la lista y desea incluirlos en su resultado porque no son de España:
SELECT Number FROM Phones WHERE CountryCode <=> 34;