Delen via


IS [NIET] ANDERS DAN (Transact-SQL)

Van toepassing op: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft FabricSQL-database in Microsoft Fabric Preview

Vergelijkt de gelijkheid van twee expressies en garandeert een waar of onwaar resultaat, zelfs als een of beide operanden NULL zijn.

IS [NOT] DISTINCT FROM is een predicaat dat wordt gebruikt in de zoekvoorwaarde van WHERE-componenten en HAVING-componenten , de joinvoorwaarden van FROM-componenten en andere constructies waarbij een Booleaanse waarde is vereist.

Transact-SQL syntaxis-conventies

Syntax

expression IS [NOT] DISTINCT FROM expression

Arguments

expression

Elke geldige expressie.

De expressie kan een kolom, een constante, een functie, een variabele, een scalaire subquery of een combinatie van kolomnamen, constanten en functies zijn die zijn verbonden door een operator of operator of een subquery.

Remarks

Als u een NULL-waarde vergelijkt met een andere waarde, inclusief een andere NULL, krijgt u een onbekend resultaat. IS [NIET] DISTINCT FROM retourneert altijd waar of onwaar, omdat null-waarden worden behandeld als bekende waarden wanneer deze worden gebruikt als vergelijkingsoperator.

In de volgende voorbeeldtabel worden waarden A gebruikt en B wordt het gedrag van IS [NIET] DISTINCT FROM geïllustreerd:

A B A = B A IS NIET ANDERS DAN B
0 0 True True
0 1 False False
0 NULL Unknown False
NULL NULL Unknown True

Wanneer u een query uitvoert die IS [NOT] DISTINCT FROM bevat op gekoppelde servers, varieert de querytekst die naar de gekoppelde server wordt verzonden, afhankelijk van of we kunnen bepalen of de gekoppelde server de mogelijkheid heeft om de syntaxis te parseren.

Als we bepalen dat de gekoppelde server IS [NOT] DISTINCT FROM kan parseren, wordt de syntaxis as-isgedecodeerd. Als we niet kunnen vaststellen dat een gekoppelde server IS [NIET] DISTINCT FROM kan parseren, worden de volgende expressies gedecodeerd:

A IS DISTINCT FROM B wordt gedecodeerd naar: ((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 wordt gedecodeerd naar: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))

Examples

A. IS DISTINCT FROM gebruiken

In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld verschilt van de gehele waarde van 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

De resultaten sluiten alle rijen uit waarbij id de waarde van 17 overeenkomt.

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

B. Gebruik IS NIET UNIEK VAN

In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld niet verschilt van de gehele waarde van 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

De resultaten retourneren alleen de rijen waar de id overeenkomende waarde van 17 is.

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

C. IS DISTINCT FROM gebruiken op basis van een NULL-waarde

In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld verschilt van 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

De resultaten retourneren alleen de rijen waarin het id niet NULL was.

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

D. IS NOT DISTINCT FROM gebruiken op basis van een NULL-waarde

In het volgende voorbeeld worden rijen geretourneerd waarbij het id veld niet verschilt van 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

De resultaten retourneren alleen de rijen waarin null id was.

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

See also