IS DISTINCT FROM
predikát byl představen jako funkce T151 SQL:1999 a jeho čitelná negace IS NOT DISTINCT FROM
, byl přidán jako funkce T152 SQL:2003. Účelem těchto predikátů je zaručit, že výsledek porovnání dvou hodnot je buď True nebo Nepravda , nikdy Neznámé .
Tyto predikáty fungují s jakýmkoli srovnatelným typem (včetně řádků, polí a multiset), takže je poměrně komplikované je přesně emulovat. SQL Server však většinu těchto typů nepodporuje, takže se můžeme dostat docela daleko kontrolou null argumentů/operandů:
-
a IS DISTINCT FROM b
lze přepsat jako:((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
lze přepsat jako:(NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
Vaše vlastní odpověď je nesprávná, protože nezohledňuje, že FALSE OR NULL
vyhodnotí jako Neznámé . Například NULL IS DISTINCT FROM NULL
by měl být vyhodnocen jako False . Podobně 1 IS NOT DISTINCT FROM NULL
by měl být vyhodnocen jako False . V obou případech dávají vaše výrazy hodnotu Neznámé .