El problema es con la comparación NULL. Si a.field1 o b.field3 es NULL, debe usar una instrucción IS NULL o IS NOT NULL. Podría usar un valor predeterminado para a.field1 y b.field3 con la función ISNULL.
ISNULL(a.field1,0) <> ISNULL(b.field3,0)
en este caso hay una comparación con el valor 0.
SELECT IIF(NULL=NULL,'true','false') -- El resultado es falso. ¡Increíble!