Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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
SQL database em Microsoft Fabric
Compara a igualdade de duas expressões e garante um resultado verdadeiro ou falso, mesmo que um ou ambos os operandos sejam NULL.
É [NÃO] DISTINTO DE é um predicado usado na condição de pesquisa de cláusulas WHERE e cláusulas HAVE , as condições de junção de cláusulas FROM e outras construções onde um valor booleano é necessário.
Transact-SQL convenções de sintaxe
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Qualquer expressão 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 coluna, constantes e funções conectadas por um operador ou operadores, ou 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 usado como um operador de comparação.
A tabela de exemplo a seguir usa valores A e B para ilustrar o comportamento de IS [NOT] DISTINTO DE:
| 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 relação aos servidores vinculados, o texto da consulta enviado para o servidor vinculado varia, dependendo se podemos 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 as-is. Se não pudermos determinar que um servidor vinculado pode analisar IS [NOT] DISTINCT FROM, decodificaremos para as seguintes expressões:
A IS DISTINCT FROM B irá descodificar 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 irá descodificar para: (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))
Examples
A. A utilização É DISTINTA DA
O exemplo a seguir retorna linhas em que o id campo é 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 onde id correspondeu ao valor de 17.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. A utilização NÃO É DISTINTA DA
O exemplo a seguir retorna linhas em que o id campo 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 o id correspondeu ao valor de 17.
id message
----------- --------
17 abc
17 yes
C. Use É DISTINTO DE em relação a um valor NULL
O exemplo a seguir retorna linhas em que o id campo é diferente 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 onde o id não era NULL.
id message
----------- --------
10 NULL
17 abc
17 yes
D. Use NÃO É DISTINTO DE em relação a um valor NULL
O exemplo a seguir retorna linhas em que o id campo 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 onde o id foi NULL.
id message
----------- --------
NULL hello
NULL NULL