Porque qualquer operador de comparação sobre
NULL
aparecendo em um filtro sql deve (e faz) fazer com que a linha não seja selecionada. Você deve usar o operador nulo seguro
<=>
para comparar com a coluna contendo NULL
valores e outros NOT NULL
valor, mas <=>
retornará 1
quando ambos os operandos são NULL
porque NULL
nunca é considerado igual a NULL
. Este é um exemplo de uma situação em que o operador null safe é útil:
Você tem uma tabela:
Phones
----
Number
CountryCode (can be NULL)
E você deseja selecionar todos os números de telefone que não sejam da Espanha (código do país 34). A primeira tentativa geralmente é:
SELECT Number FROM Phones WHERE CountryCode <> 34;
Mas você percebe que há telefones sem código de país (valor NULL) não listados e deseja incluí-los em seu resultado porque eles não são da Espanha:
SELECT Number FROM Phones WHERE CountryCode <=> 34;