La requête A est identique à :
select 'true' where 3 = 1 or 3 = 2 or 3 = 3 or 3 = null
Puisque 3 = 3
est vrai, vous obtenez un résultat.
La requête B est identique à :
select 'true' where 3 <> 1 and 3 <> 2 and 3 <> null
Lorsque ansi_nulls
est activé, 3 <> null
est UNKNOWN, donc le prédicat prend la valeur UNKNOWN et vous n'obtenez aucune ligne.
Lorsque ansi_nulls
est désactivé, 3 <> null
est vrai, donc le prédicat est évalué à vrai et vous obtenez une ligne.