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 blze 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 blze 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é .