Det är ingen skillnad.
Alla större motorer (det vill säga MySQL , SQL Server , Oracle och PostgreSQL ) kommer att slå samman dessa predikat på parsningsstadiet och göra identiska planer från dem.
Hantering av dessa villkor är mer komplicerad än att bara använda operatörer i en eller annan ordning.
Till exempel i Oracle , en IS NOT NULL (eller NOT IS NULL ) condition innebär en möjlighet att använda ett index, så en fråga som denna:
SELECT column
FROM mytable
WHERE column IS NOT NULL
kommer med största sannolikhet att köras med en index fast full scan , utan ytterligare kontroller gjorda under körning (eftersom NULL värden kommer helt enkelt inte in i indexet, så det är ingen idé att kontrollera dem).
Även om varje post skulle behöva kontrolleras, kommer kontrollordningen att definieras av optimeraren (och inte av den ordning som predikaten och operatorerna visas i WHERE klausul).
Här är till exempel en plan för ett Oracle fråga:
SQL> EXPLAIN PLAN FOR
2
2 SELECT *
3 FROM t_test
4 WHERE NOT column IS NULL
5 /
Explained
SQL> SELECT *
2 FROM TABLE(DBMS_XPLAN.display())
3 /
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 958699830
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 30 | 1260 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_TEST | 30 | 1260 | 3 (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("COLUMN" IS NOT NULL)
Som du kan se är filter översattes internt till en IS NOT NULL (vilket Oracle tillsammans med de flesta kommentatorer verkar det vara en lämpligare form)
Uppdatering:
Som Jonathan Leffler påpekade är dessa skillnader vid utvärdering av tupler (i motsats till enstaka kolumner).
En tuppel som består av blandad NULL och icke-NULL värden är varken en NULL inte heller en NOT NULL .
I PostgreSQL (som stöder detta predikat mot tupler), båda dessa uttryck:
SELECT (1, NULL) IS NULL
SELECT (1, NULL) IS NOT NULL
utvärdera till falskt.