Membandingkan COALESCE dan ISNULL
Fungsi ISNULL dan ekspresi COALESCE memiliki tujuan yang sama tetapi dapat berperilaku berbeda.
- Karena ISNULL adalah sebuah fungsi, maka hanya dievaluasi 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 CASE dan mengembalikan tipe data nilai dengan prioritas tertinggi.
- Kemampuan NULL dari ekspresi hasil berbeda untuk ISNULL dan COALESCE. Nilai kembalian ISNULL selalu dianggap NOT NULLable (dengan asumsi nilai pengembalian tidak dapat dibatalkan) sedangkan COALESCE dengan parameter non-null dianggap NULL. Jadi ekspresi ISNULL(NULL, 1) danCOALESCE(NULL, 1) meskipun ekivalen memiliki nilai nullability yang berbeda. Ini membuat perbedaan jika Anda menggunakan ekspresi ini dalam kolom yang dihitung, membuat batasan kunci, atau membuat nilai balik dari UDF skalar deterministik sehingga dapat diindeks seperti yang ditunjukkan pada contoh berikut.
> USE tempdb;
> GO
> -- This statement fails because the PRIMARY KEY cannot accept NULL values
> -- and the nullability of the COALESCE expression for col2
> -- evaluates to NULL.
> CREATE TABLE #Demo ( col1 integer NULL, col2 AS COALESCE(col1, 0) PRIMARY KEY, col3 AS ISNULL(col1, 0) );
>
> -- This statement succeeds because the nullability of the
> -- ISNULL function evaluates 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. Misalnya, nilai NULL untuk ISNULL dikonversi ke int sedangkan untuk COALESCE, Anda harus memberikan tipe data.ISNULL hanya membutuhkan 2 parameter sedangkan COALESCE mengambil variabeljumlah parameter.
Sumber:BOL