Anda dapat menggunakan kedua metode ini tetapi ada perbedaan:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
Membandingkan COALESCE () dan ISNULL ():
Fungsi ISNULL dan ekspresi COALESCE memiliki tujuan yang sama tetapi dapat berperilaku berbeda.
Karena ISNULL adalah fungsi, ia dievaluasi hanya sekali. Seperti dijelaskan di atas, nilai input untuk ekspresi COALESCE dapat dievaluasi beberapa kali.
Penentuan tipe data dari ekspresi yang dihasilkan berbeda. ISNULL menggunakan tipe data dari parameter pertama, COALESCE mengikuti aturan ekspresi KASUS dan mengembalikan tipe data nilai dengan prioritas tertinggi.
NULLability dari ekspresi hasil berbeda untuk ISNULL dan COALESCE. Nilai kembali ISNULL selalu dianggap TIDAK NULLable (dengan asumsi nilai kembali adalah non-nullable) sedangkan COALESCE dengan parameter non-nol dianggap NULL. Jadi ekspresi ISNULL (NULL, 1) dan COALESCE (NULL, 1) meskipun setara memiliki nilai nullability yang berbeda. Ini membuat perbedaan jika Anda menggunakan ekspresi ini dalam kolom yang dihitung, membuat batasan kunci atau membuat nilai pengembalian skalar UDF deterministik sehingga dapat diindeks seperti yang ditunjukkan pada contoh berikut.
- Pernyataan ini gagal karena PRIMARY KEY tidak dapat menerima nilai NULL - dan nullability dari ekspresi COALESCE untuk col2 - mengevaluasi ke NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
- Pernyataan ini berhasil karena nullability dari fungsi - ISNULL mengevaluasi AS NOT NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
Validasi untuk ISNULL dan COALESCE juga berbeda. Sebagai contoh, nilai NULL untuk ISNULL dikonversi ke int sedangkan untuk COALESCE, Anda harus memberikan tipe data.
ISNULL hanya membutuhkan 2 parameter sedangkan COALESCE mengambil sejumlah variabel parameter.
jika Anda perlu tahu lebih banyak di sini adalah dokumen lengkap dari msdn.