Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2022 (16.x)
Azure SQL Database
AzureSQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric SQL
database in Microsoft Fabric
Confronta l'uguaglianza di due espressioni e garantisce un risultato true o false, anche se uno o entrambi gli operandi sono NULL.
IS [NOT] DISTINCT FROM è un predicato usato nella condizione di ricerca delle clausole WHERE e HAVING, nelle condizioni di join delle clausole FROM e in altri costrutti in cui è necessario un valore booleano.
Convenzioni relative alla sintassi Transact-SQL
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Qualsiasi espressione valida.
L'espressione può essere una colonna, una costante, una funzione, una variabile, una sottoquery scalare oppure qualsiasi combinazione di nomi di colonna, costanti e funzioni connessi da uno o più operatori oppure da una sottoquery.
Remarks
Il confronto di un valore NULL con qualsiasi altro valore, incluso un altro valore NULL, genera un risultato sconosciuto. IS [NOT] DISTINCT FROM restituirà sempre true o false, perché considererà i valori NULL come valori noti quando viene usato come operatore di confronto.
Nella tabella di esempio seguente si usano valori A e B per illustrare il comportamento di IS [NOT] DISTINCT FROM:
| A | B | A = B | UN NON È DISTINTO DA B |
|---|---|---|---|
| 0 | 0 | True | True |
| 0 | 1 | False | False |
| 0 | NULL | Unknown | False |
| NULL | NULL | Unknown | True |
Quando si esegue una query contenente IS [NOT] DISTINCT FROM su server collegati, il testo della query inviato al server collegato varia a seconda che sia possibile o meno determinare che il server collegato include la funzionalità per analizzare la sintassi.
Se si determina che il server collegato può analizzare IS [NOT] DISTINCT FROM, la sintassi verrà decodificata così come è. Se non è possibile determinare che il server collegato può analizzare IS [NOT] DISTINCT FROM, la sintassi verrà decodificata nelle espressioni seguenti:
A IS DISTINCT FROM B verrà decodificato in ((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 verrà decodificato in (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))
Examples
A. Usare IS DISTINCT FROM
Nell'esempio seguente vengono restituite le righe in cui il campo id è distinto dal valore intero 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
I risultati escludono tutte le righe in cui id corrisponde al valore 17.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. Usare IS NOT DISTINCT FROM
Nell'esempio seguente vengono restituite le righe in cui il campo id non è distinto dal valore intero 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
I risultati restituiscono solo le righe in cui id corrisponde al valore 17.
id message
----------- --------
17 abc
17 yes
C. Usare IS DISTINCT FROM con un valore NULL
Nell'esempio seguente vengono restituite le righe in cui il campo id è distinto da 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
I risultati restituiscono solo le righe in cui id non è NULL.
id message
----------- --------
10 NULL
17 abc
17 yes
D. Usare IS NOT DISTINCT FROM con un valore NULL
Nell'esempio seguente vengono restituite le righe in cui il campo id non è distinto da 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
I risultati restituiscono solo le righe in cui id è NULL.
id message
----------- --------
NULL hello
NULL NULL