APAKAH [TIDAK] BERBEDA DARI (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL di Microsoft FabricWarehouse di Microsoft Fabric

Membandingkan kesetaraan dua ekspresi dan menjamin hasil benar atau salah, bahkan jika satu atau kedua operand adalah NULL.

IS [NOT] DISTINCT FROM adalah predikat yang digunakan dalam kondisi pencarian klausa WHERE dan klausa HAVING , kondisi gabungan klausul FROM , dan konstruksi lain di mana nilai Boolean diperlukan.

Konvensi sintaks transact-SQL

Sintaks

expression IS [NOT] DISTINCT FROM expression

Argumen

expression

Ekspresi apa pun yang valid.

Ekspresi dapat berupa kolom, konstanta, fungsi, variabel, subkueri skalar, atau kombinasi nama kolom, konstanta, dan fungsi apa pun yang terhubung oleh operator atau operator, atau subkueri.

Keterangan

Membandingkan nilai NULL dengan nilai lain, termasuk NULL lain, akan memiliki hasil yang tidak diketahui. IS [NOT] DISTINCT FROM akan selalu mengembalikan true atau false, karena akan memperlakukan nilai NULL sebagai nilai yang diketahui saat digunakan sebagai operator perbandingan.

Contoh tabel berikut menggunakan nilai A dan B untuk mengilustrasikan perilaku IS [NOT] DISTINCT FROM:

A B A = B A TIDAK BERBEDA DARI B
0 0 Benar Benar
0 1 Salah Salah
0 NULL Tidak dikenal Salah
NULL NULL Tidak dikenal Benar

Saat menjalankan kueri yang berisi IS [NOT] DISTINCT FROM terhadap server tertaut, teks kueri yang dikirim ke server tertaut akan bervariasi, berdasarkan apakah kita dapat menentukan bahwa server tertaut memiliki kemampuan untuk mengurai sintaks.

Jika kita menentukan bahwa server yang ditautkan dapat mengurai IS [NOT] DISTINCT FROM, kita akan mendekode sintaks apa adanya. Jika kita tidak dapat menentukan bahwa server tertaut dapat mengurai IS [NOT] DISTINCT FROM, kita akan mendekode ke ekspresi berikut:

A IS DISTINCT FROM B akan mendekode ke: ((A <> B OR A IS NULL OR B IS NULL) AND NOT (A IS NULL AND B IS NULL))

A IS NOT DISTINCT FROM B akan mendekode ke: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))

Contoh

J. Gunakan IS DISTINCT FROM

Contoh berikut mengembalikan baris di mana id bidang berbeda dari nilai bilangan bulat 17.

DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO

SELECT * FROM #SampleTempTable WHERE id IS DISTINCT FROM 17;
DROP TABLE IF EXISTS #SampleTempTable;
GO

Hasilnya mengecualikan semua baris di mana id cocok dengan nilai 17.

id          message
----------- ---------
NULL        hello
10          NULL
NULL        NULL

B. Penggunaan TIDAK BERBEDA DARI

Contoh berikut mengembalikan baris di mana id bidang tidak berbeda dari nilai bilangan bulat 17.

DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO

SELECT * FROM #SampleTempTable WHERE id IS NOT DISTINCT FROM 17;
DROP TABLE IF EXISTS #SampleTempTable;
GO

Hasilnya hanya mengembalikan baris di mana nilai yang id cocok dengan 17.

id          message
----------- --------
17          abc
17          yes

C. Gunakan IS DISTINCT FROM terhadap nilai NULL

Contoh berikut mengembalikan baris di mana id bidang berbeda dari NULL.

DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO

SELECT * FROM #SampleTempTable WHERE id IS DISTINCT FROM NULL;
DROP TABLE IF EXISTS #SampleTempTable;
GO

Hasilnya hanya mengembalikan baris di id mana bukan NULL.

id          message
----------- --------
10          NULL
17          abc
17          yes

D. Gunakan IS NOT DISTINCT FROM terhadap nilai NULL

Contoh berikut mengembalikan baris di mana id bidang tidak berbeda dari NULL.

DROP TABLE IF EXISTS #SampleTempTable;
GO
CREATE TABLE #SampleTempTable (id INT, message nvarchar(50));
INSERT INTO #SampleTempTable VALUES (null, 'hello') ;
INSERT INTO #SampleTempTable VALUES (10, null);
INSERT INTO #SampleTempTable VALUES (17, 'abc');
INSERT INTO #SampleTempTable VALUES (17, 'yes');
INSERT INTO #SampleTempTable VALUES (null, null);
GO

SELECT * FROM #SampleTempTable WHERE id IS NOT DISTINCT FROM NULL;
DROP TABLE IF EXISTS #SampleTempTable;
GO

Hasilnya hanya mengembalikan baris tempat id NULL.

id          message
----------- --------
NULL        hello
NULL        NULL

Baca juga