Tidak ada perbedaan.
Semua mesin utama (yaitu MySQL , SQL Server , Oracle dan PostgreSQL ) akan menggabungkan predikat ini pada tahap penguraian, membuat rencana yang identik darinya.
Penanganan kondisi ini lebih kompleks daripada hanya menerapkan operator dalam satu atau lain urutan.
Misalnya, di Oracle , sebuah IS NOT NULL (atau IS NOT NULL ) condition menyiratkan kemungkinan untuk menggunakan indeks, jadi kueri seperti ini:
SELECT column
FROM mytable
WHERE column IS NOT NULL
kemungkinan besar akan dieksekusi dengan index fast full scan , tanpa pemeriksaan tambahan yang dilakukan saat runtime (sejak NULL nilai tidak akan masuk ke dalam indeks, jadi tidak ada gunanya memeriksanya).
Bahkan jika setiap record perlu diperiksa, urutan pemeriksaan akan ditentukan oleh pengoptimal (dan bukan berdasarkan urutan predikat dan operator yang muncul di WHERE klausa).
Misalnya, berikut adalah rencana untuk Oracle permintaan:
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)
Seperti yang Anda lihat, filter diterjemahkan secara internal menjadi IS NOT NULL (yang Oracle bersama dengan sebagian besar komentator tampaknya percaya sebagai bentuk yang lebih tepat)
Pembaruan:
Seperti yang ditunjukkan Jonathan Leffler, ini adalah perbedaan saat mengevaluasi tupel (sebagai lawan dari kolom tunggal).
Tuple yang terdiri dari campuran NULL dan non-NULL nilai bukan NULL atau IS NOT NULL .
Di PostgreSQL (yang mendukung predikat ini terhadap tupel), kedua ekspresi ini:
SELECT (1, NULL) IS NULL
SELECT (1, NULL) IS NOT NULL
evaluasi ke salah.