SQL é nulo e = nulo

Duplicar Possível:
o que é “= null” e “IS NULL”
Existe alguma diferença entre IS NULL e = NULL

Qual é a diferença entre

where x is null 

e

 where x = null 

e por que o último não funciona?

   

No SQL, uma comparação entre um valor null e qualquer outro valor (incluindo outro null ) usando um operador de comparação (eg = != , < , Etc) resultará em um null , que é considerado false para os propósitos de um onde cláusula (estritamente falando, é "não é verdade", ao invés de "falso", mas o efeito é o mesmo).

O raciocínio é que um null significa "desconhecido", portanto, o resultado de qualquer comparação com um null também é "desconhecido". Então você não terá nenhum hit nas linhas codificando where my_column = null .

O SQL fornece a syntax especial para testar se uma coluna é null , via is null e is not null , o que é uma condição especial para testar um null (ou não um null ).

Aqui está um pouco de SQL mostrando uma variedade de condições ee seus efeitos conforme acima.

 create table t (x int, y int); insert into t values (null, null), (null, 1), (1, 1); select 'x = null' as test , x, y from t where x = null union all select 'x != null', x, y from t where x != null union all select 'not (x = null)', x, y from t where not (x = null) union all select 'x = y', x, y from t where x = y union all select 'not (x = y)', x, y from t where not (x = y); 

retorna apenas 1 linha (conforme esperado):

 TEST XY x = y 1 1 

Veja isso rodando no SQLFiddle

É importante notar que NULL não é igual a NULL .

NULL não é um valor e, portanto, não pode ser comparado a outro valor.

where x is null verifica se x é um valor nulo.

where x = null está verificando se x é igual a NULL, o que nunca será verdade

A primeira é a maneira correta de verificar se um valor de campo é null enquanto não funciona da maneira esperada, porque null é um valor especial que não é igual a nada, portanto, você não pode usar a comparação de igualdade usando = para ele.

Então, quando você precisa verificar se o valor de um campo é null ou não, use:

 where x is null 

ao invés de:

 where x = null 

Eu penso que a igualdade é algo que pode ser absolutamente determinado. O problema com null é que é inerentemente desconhecido. null combinado com qualquer outro valor é null – unknown. Perguntando SQL “Meu valor é igual a null?” seria desconhecido a cada momento, mesmo que a input seja nula. Eu acho que a implementação do IS NULL deixa claro.