Le problème est avec la comparaison NULL. Si a.field1 ou b.field3 est NULL, vous devez utiliser une instruction IS NULL ou IS NOT NULL. Vous pouvez utiliser une valeur par défaut pour a.field1 et b.field3 avec la fonction ISNULL.
ISNULL(a.field1,0) <> ISNULL(b.field3,0)
dans ce cas il y a comparaison avec la valeur 0.
SELECT IIF(NULL=NULL,'true','false') -- Le résultat est faux. Incroyable !