159 votes

Pourquoi est-NULL = NULL false dans SQL server

Dans SQL server si vous avez nullParam=NULL dans une clause where, il prend toujours la valeur false. C'est contre-intuitif et m'a fait beaucoup d'erreurs. Je ne comprends l' IS NULL et IS NOT NULL mots-clés sont la bonne façon de le faire. Mais pourquoi SQL server se comporter de cette façon?

218voto

Scott Ivey Points 19577

Pensez à la valeur null comme "inconnu" dans ce cas (ou "n'existe pas"). Dans chacun de ces cas, vous ne pouvez pas dire qu'ils sont égaux, parce que vous ne connaissez pas la valeur de l'un d'eux. Donc, null=null renvoie pas true (false ou null, selon votre système), parce que vous ne connaissez pas les valeurs à dire qu'ils SONT égaux. Ce comportement est défini dans la norme ANSI SQL-92.

EDIT: Cela dépend de votre ansi_nulls réglage. si vous avez ANSI_NULLS éteint, cela PERMETTRA d'évaluer la valeur true. Exécutez le code suivant pour un exemple...

set ansi_nulls off

if null = null
	print 'true'
else
	print 'false'


set ansi_nulls ON

if null = null
	print 'true'
else
	print 'false'

141voto

Neil McGuigan Points 10123

Quel est l'âge de Frank? Je ne sais pas (null).

Quel est l'âge de Shirley? Je ne sais pas (null).

Frank et Shirley le même âge?

La réponse est correcte devrait être "je ne sais pas" (null), pas de "non", comme Frank et Shirley pourrait être le même âge, nous ne savons tout simplement pas.

10voto

Mister Points 129

Faut-il réellement à false? Ce serait vraiment contre-intuitif... Il faut évaluer la valeur NULL.

9voto

Peut-être que ça dépend, mais j'ai pensé NULL=NULL évalue NULL comme la plupart des opérations avec NULL comme un opérande.

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