Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2022 (16.x)
Azure SQL Database
AzureSQL Managed
Instance SQL Analytics endpoint em Microsoft Fabric
Warehouse em Microsoft Fabric Database
SQL em Microsoft Fabric
Compara a igualdade de duas expressões e garante um resultado true ou false, mesmo que um ou ambos os operandos sejam NULL.
IS [NOT] DISTINCT FROM é um predicado usado no critério de pesquisa das cláusulas WHERE e HAVING, nas condições de junção das cláusulas FROM e em outras construções em que um valor booliano é necessário.
Convenções de sintaxe de Transact-SQL
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Qualquer expression válida.
A expressão pode ser uma coluna, uma constante, uma função, uma variável, uma subconsulta escalar ou qualquer combinação de nomes de colunas, constantes e funções conectadas por um operador ou operadores ou por uma subconsulta.
Remarks
Comparar um valor NULL com qualquer outro valor, incluindo outro NULL, terá um resultado desconhecido. IS [NOT] DISTINCT FROM sempre retornará true ou false, pois tratará valores NULL como valores conhecidos quando usados como um operador de comparação.
A tabela de exemplo a seguir usa os valores A e B para ilustrar o comportamento de IS [NOT] DISTINCT FROM:
| A | B | A = B | A NÃO É DISTINTO DE B |
|---|---|---|---|
| 0 | 0 | True | True |
| 0 | 1 | False | False |
| 0 | NULL | Unknown | False |
| NULL | NULL | Unknown | True |
Ao executar uma consulta que contém IS [NOT] DISTINCT FROM em servidores vinculados, o texto da consulta enviado ao servidor vinculado variará em função de ser possível determinar se o servidor vinculado tem a capacidade de analisar a sintaxe.
Se determinarmos que o servidor vinculado pode analisar IS [NOT] DISTINCT FROM, decodificaremos a sintaxe como está. Se não pudermos determinar se um servidor vinculado pode analisar IS [NOT] DISTINCT FROM, decodificaremos para as seguintes expressões:
A IS DISTINCT FROM B decodificará para: ((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 decodificará para: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))
Examples
A. Usar IS DISTINCT FROM
O exemplo a seguir retorna linhas em que o campo id é distinto do valor inteiro de 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
Os resultados excluem todas as linhas em que id correspondeu ao valor de 17.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. Usar IS NOT DISTINCT FROM
O exemplo a seguir retorna linhas em que o campo id não é distinto do valor inteiro de 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
Os resultados retornam apenas as linhas em que id correspondeu ao valor de 17.
id message
----------- --------
17 abc
17 yes
C. Usar IS DISTINCT FROM em relação a um valor NULL
O exemplo a seguir retorna linhas em que o campo id é distinto de 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
Os resultados retornam apenas as linhas em que id não era NULL.
id message
----------- --------
10 NULL
17 abc
17 yes
D. Usar IS NOT DISTINCT FROM em relação a um valor NULL
O exemplo a seguir retorna linhas em que o campo id não é distinto de 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
Os resultados retornam apenas as linhas em que id era NULL.
id message
----------- --------
NULL hello
NULL NULL