371 votes

Pas égal à <>! = Opérateur sur NULL

Quelqu'un pourrait-il expliquer le comportement suivant en SQL?

 SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
 

410voto

OMG Ponies Points 144785

<> est la norme SQL-92; != est son équivalent. Les deux évaluent les valeurs, NULL n'étant pas - NULL étant un espace réservé pour dire qu'il n'y a pas de valeur.

C'est pourquoi vous ne pouvez utiliser que IS NULL / IS NOT NULL comme prédicats pour de telles situations.

Ce comportement n'est pas spécifique à SQL Server. Tous les dialectes SQL conformes aux normes fonctionnent de la même manière.

123voto

Barry Brown Points 9774

NULL n'a aucune valeur et ne peut donc pas être comparé en utilisant les opérateurs de valeur scalaire.

En d'autres termes, aucune valeur ne peut être égale à (ou différente de) NULL car NULL n'a aucune valeur.

Par conséquent, SQL a des prédicats spéciaux IS NULL et IS NOT NULL pour traiter NULL.

28voto

Cade Roux Points 53870

Notez que ce comportement est le comportement par défaut (ANSI).

Si vous:

  SET ANSI_NULLS OFF
 

http://msdn.microsoft.com/en-us/library/ms188048.aspx

Vous obtiendrez des résultats différents.

SET ANSI_NULLS OFF vont apparemment partir à l'avenir ...

11voto

Mahendra Points 2298

En SQL, tout ce que vous évaluez / calculez avec les résultats NULL dans INCONNU

C'est pourquoi SELECT * FROM MyTable WHERE MyColumn != NULL ou SELECT * FROM MyTable WHERE MyColumn <> NULL vous donne 0 résultats.

Pour vérifier les valeurs NULL , la fonction isNull est fournie.

De plus, vous pouvez utiliser l'opérateur IS comme vous l'avez utilisé dans la troisième requête.

J'espère que cela t'aides.

6voto

Vincent Ramdhanie Points 46265

NULL Ne peut être comparé à aucune valeur en utilisant les opérateurs de comparaison. NULL = NULL est faux. Null n'est pas une valeur. L'opérateur IS est spécialement conçu pour gérer les comparaisons NULL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X