Il problema è con il confronto NULL. Se a.field1 o b.field3 è NULL è necessario utilizzare un'istruzione IS NULL o IS NOT NULL. È possibile utilizzare un valore predefinito per a.field1 e b.field3 con la funzione ISNULL.
ISNULL(a.field1,0) <> ISNULL(b.field3,0)
in questo caso c'è un confronto con il valore 0.
SELECT IIF(NULL=NULL,'true','false') -- Il risultato è falso. Incredibile!