Zapytanie A jest takie samo jak:
select 'true' where 3 = 1 or 3 = 2 or 3 = 3 or 3 = null
Ponieważ 3 = 3
to prawda, otrzymasz wynik.
Zapytanie B jest takie samo jak:
select 'true' where 3 <> 1 and 3 <> 2 and 3 <> null
Kiedy ansi_nulls
jest włączone, 3 <> null
jest NIEZNANE, więc predykat przyjmuje wartość NIEZNANE i nie otrzymujesz żadnych wierszy.
Kiedy ansi_nulls
jest wyłączone, 3 <> null
jest prawdziwe, więc predykat ma wartość prawda i otrzymujesz wiersz.