De IS DISTINCT FROM
predikaat werd geïntroduceerd als feature T151 van SQL:1999, en de leesbare ontkenning ervan, IS NOT DISTINCT FROM
, is toegevoegd als functie T152 van SQL:2003. Het doel van deze predikaten is om te garanderen dat het resultaat van het vergelijken van twee waarden ofwel True is. of Fout , nooit Onbekend .
Deze predikaten werken met elk vergelijkbaar type (inclusief rijen, arrays en multisets), waardoor het nogal ingewikkeld is om ze exact te emuleren. SQL Server ondersteunt de meeste van deze typen echter niet, dus we kunnen behoorlijk ver komen door te controleren op null-argumenten/operanden:
-
a IS DISTINCT FROM b
kan worden herschreven als:((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
kan worden herschreven als:(NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
Uw eigen antwoord is onjuist omdat het geen rekening houdt met FALSE OR NULL
evalueert tot Onbekend . Bijvoorbeeld:NULL IS DISTINCT FROM NULL
zou moeten evalueren tot Onwaar . Evenzo, 1 IS NOT DISTINCT FROM NULL
zou moeten evalueren tot Onwaar . In beide gevallen leveren uw uitdrukkingen Onbekend op .