Není v tom žádný rozdíl.
Všechny hlavní motory (to je MySQL , SQL Server , Oracle a PostgreSQL ) sloučí tyto predikáty ve fázi analýzy a vytvoří z nich identické plány.
Manipulace s těmito podmínkami je složitější než pouhé použití operátorů v té či oné objednávce.
Například v Oracle , IS NOT NULL (nebo NOT IS NULL ) podmínka implikuje možnost použít index, takže dotaz jako tento:
SELECT column
FROM mytable
WHERE column IS NOT NULL
bude s největší pravděpodobností spuštěn pomocí index fast full scan bez dalších kontrol prováděných za běhu (od NULL hodnoty se do indexu prostě nedostanou, takže je zbytečné je kontrolovat).
I když by bylo nutné zkontrolovat každý záznam, pořadí kontrol bude definováno optimalizátorem (a nikoli pořadím, v jakém se predikáty a operátory objeví v WHERE doložka).
Zde je například plán pro Oracle dotaz:
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)
Jak můžete vidět, filter byl interně přeložen do IS NOT NULL (který Oracle spolu s většinou komentujících se zdá být vhodnější formou)
Aktualizace:
Jak zdůraznil Jonathan Leffler, toto je rozdíl při hodnocení n-tic (na rozdíl od jednotlivých sloupců).
N-tice sestávající ze smíšených NULL a jiné než NULL Hodnoty nejsou ani NULL ani NOT NULL .
V PostgreSQL (který podporuje tento predikát proti n-ticím), oba tyto výrazy:
SELECT (1, NULL) IS NULL
SELECT (1, NULL) IS NOT NULL
vyhodnotit jako nepravdivé.