I would consider SET ANSI_NULLS OFF mode very convenient and would use it by default if it worked consistently - allow to compare nulls using = or != everywhere. But it works only if if I compare to explicit inline null, but if I compare to a field that contains null - it DOES NOT WORK. Why would Microsoft design it like that ? No wonder why nobody uses SET ANSI_NULLS OFF mode by default. I'd rather stay with pain of "is null" and "is not null" than think about what I use inline and what not.
Here is example that shows the problem - line with ??? should return 2 rows, but it returns only one row.
CREATE TABLE t1 (a int null, b int null)
INSERT INTO t1 values (null,null)
INSERT INTO t1 values (0,null)
INSERT INTO t1 values (null,0)
INSERT INTO t1 values (0,0)
set ansi_nulls ON
select * from t1 where a=null -- empty result
select * from t1 where a=b -- (0,0)
select * from t1 where null=null -- empty result
set ansi_nulls OFF
select * from t1 where a=null -- (null,null),(null,0)
select * from t1 where a=b -- why only (0,0) ???, it should be (0,0),(null,null)
select * from t1 where null=null -- returns all 4 rows
drop table t1