Em várias linguagens NULL é tratado de forma diferente:A maioria das pessoas conhece a lógica de dois valores onde
true
e false
são os únicos valores comparáveis em expressões booleanas (mesmo é falso é definido como 0 e verdadeiro como qualquer outra coisa). No SQL padrão você tem que pensar na lógica de três valores. NULL não é tratado como um valor real, você pode chamá-lo de "desconhecido". Portanto, se o valor for desconhecido, não está claro se no seu caso
state
é 0, 1, ou qualquer outra coisa. Então NULL != 1
resultados para NULL
novamente. Isso conclui que onde quer que você filtre algo que possa ser NULL, você terá que tratar os valores NULL por conta própria. Observe que a sintaxe também é diferente:valores NULL só podem ser comparados com
x IS NULL
em vez de x = NULL
. Veja Wikipedia para uma tabela verdade mostrando os resultados das operações lógicas.