Le IS DISTINCT FROM
le prédicat a été introduit en tant que fonctionnalité T151 de SQL:1999, et sa négation lisible, IS NOT DISTINCT FROM
, a été ajoutée en tant que fonctionnalité T152 de SQL:2003. Le but de ces prédicats est de garantir que le résultat de la comparaison de deux valeurs est soit True ou Faux , jamais Inconnu .
Ces prédicats fonctionnent avec n'importe quel type comparable (y compris les lignes, les tableaux et les multi-ensembles), ce qui rend plutôt compliqué leur émulation exacte. Cependant, SQL Server ne prend pas en charge la plupart de ces types, nous pouvons donc aller assez loin en vérifiant les arguments/opérandes nuls :
-
a IS DISTINCT FROM b
peut être réécrit comme :((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
-
a IS NOT DISTINCT FROM b
peut être réécrit comme :(NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
Votre propre réponse est incorrecte car elle ne considère pas que FALSE OR NULL
est évalué à Inconnu . Par exemple, NULL IS DISTINCT FROM NULL
doit être évalué à Faux . De même, 1 IS NOT DISTINCT FROM NULL
doit être évalué à Faux . Dans les deux cas, vos expressions donnent Inconnu .