Recentemente, percebi que precisamos usar uma sintaxe especial IS NULL
para comparar um literal com NULL.
Por que = NULL
não funciona aqui?
Recentemente, percebi que precisamos usar uma sintaxe especial IS NULL
para comparar um literal com NULL.
Por que = NULL
não funciona aqui?
Dê uma olhada nas notas do PSOUG sobre NULL . Como Fabricio Araujo sugeriu, NULL não é realmente um valor como o número 4 ou a string 'tiras de bacon'. Na verdade, NULL não é tipado na linguagem SQL, e é por isso que você não pode usá-lo validamente em uma comparação de igualdade. Você precisa da
IS [NOT] NULL
sintaxe especial para verificar se um valor é NULL ou não.No SQL Server, temos uma configuração de conexão para conseguir
=NULL
se comportar igualmente aoIS NULL
. Mas nas versões mais recentes não é mais recomendado - é até marcado como obsoleto.O recomendado é a forma SQL Standard - o
IS [NOT] NULL
operador.(E não vou começar uma guerra se 'NULL é um valor ou um status' aqui)... hehehe
O Oracle trata NULL como um valor desconhecido. Pergunte a si mesmo se essa igualdade funciona.
ou de outra forma declarado
A resposta é claramente talvez, o que não é verdadeiro nem falso.
Acrescentarei um pouco de esclarecimento ao NULL, pois já o vi usado:
Embora NULL realmente signifique "não definido", no contexto desta questão, acredito que a afirmação acima esteja correta.
Há vários motivos para uma coluna ter um valor NULL:
Em alguns contextos, NULL pode ser tratado de maneiras que podem ser consideradas incorretas, incluindo:
Em vez de justificar a
is null
sintaxe, acho melhor apontar que não há boas regras gerais ao lidar comnull
s e a sintaxe usada para lidar com eles. Por exemplo:set val = null
em vez de algo comoset val to null
o que pode espelharis null
melhor a sintaxenull
dizer: "os nulos se comportam como fulano aqui, então deveriam se comportar como fulano aquiAqui está um excelente ensaio sobre o assunto de uma perspectiva postgres. Resumindo, dizendo que os nulos são tratados de maneira diferente dependendo do contexto e não cometa o erro de fazer suposições sobre eles.