La raison <>
ne fonctionne pas est que SQL traite NULL
comme inconnu - il ne sait pas ce que NULL
est censé signifier, donc il évalue à la fois =
et <>
sur un NULL
valeur UNKNOWN
(qui est traité comme faux dans une clause where ou une condition de jointure). Pour plus d'informations, lisez ceci :Pourquoi NULL =NULL est-il évalué comme faux dans le serveur SQL
.
S'il y a un index dessus, l'utilisation de la fonction ISNULL signifie que l'index ne peut pas être utilisé, donc pour s'assurer que la requête peut utiliser l'index, utilisez simplement OR
:
SELECT *
FROM TableName
WHERE
bit_column_value IS NULL OR bit_column_value = 0