Dans plusieurs langages, NULL est géré différemment :la plupart des gens connaissent la logique à deux valeurs où true
et false
sont les seules valeurs comparables dans les expressions booléennes (même est faux est défini comme 0 et vrai comme toute autre chose).
En SQL standard, vous devez penser à la logique à trois valeurs. NULL n'est pas traité comme une valeur réelle, vous pouvez plutôt l'appeler "inconnu". Donc, si la valeur est inconnue, il n'est pas clair si dans votre cas state
est 0, 1 ou n'importe quoi d'autre. Donc NULL != 1
résultats à NULL
à nouveau.
Cela conclut que chaque fois que vous filtrez quelque chose qui peut être NULL, vous devez traiter les valeurs NULL par vous-même. Notez que la syntaxe est également différente :les valeurs NULL ne peuvent être comparées qu'avec x IS NULL
au lieu de x = NULL
. Voir Wikipedia pour une table de vérité montrant les résultats des opérations logiques.