The problem is with NULL comparison. If a.field1 or b.field3 is NULL you need to use a IS NULL or IS NOT NULL statement. You could use a default value for a.field1 and b.field3 with the ISNULL function.
ISNULL(a.field1,0) <> ISNULL(b.field3,0)
in this case there is a comparison with the value 0.
SELECT IIF(NULL=NULL,'true','false') -- The result is false. Amazing!