Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

IS NULL versus <> 1 bit SQL

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