Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplica a: SQL Server 2022 (16.x)
Azure SQL Database
AzureSQL Managed Instance
SQL Analytics endpoint en Microsoft Fabric
Warehouse en Microsoft Fabric Database
SQL en Microsoft Fabric
Compara la igualdad de dos expresiones y garantiza un resultado verdadero o falso, incluso si uno o ambos operandos son NULL.
IS [NOT] DISTINCT FROM es un predicado que se usa en la condición de búsqueda de las cláusulas WHERE y HAVING, en las condiciones de combinación de las cláusulas FROM y en otras construcciones que requieren un valor booleano.
Convenciones de sintaxis de Transact-SQL
Syntax
expression IS [NOT] DISTINCT FROM expression
Arguments
expression
Cualquier expression válida.
La expresión puede ser una columna, una constante, una función, una variable, una subconsulta escalar o cualquier combinación de nombres de columna, constantes y funciones conectados mediante uno o varios operadores o una subconsulta.
Remarks
La comparación de un valor NULL con cualquier otro valor, incluido otro NULL, generará un resultado desconocido. IS [NOT] DISTINCT FROM siempre devolverá true o false, ya que tratará los valores NULL como valores conocidos cuando se usen como operador de comparación.
En la tabla de ejemplo siguiente se usan valores A y B para ilustrar el comportamiento de IS [NOT] DISTINCT FROM:
| A | B | A = B | A NO ES DISTINTO DE B |
|---|---|---|---|
| 0 | 0 | True | True |
| 0 | 1 | False | False |
| 0 | NULL | Unknown | False |
| NULL | NULL | Unknown | True |
Al ejecutar una consulta que contiene IS [NOT] DISTINCT FROM en servidores vinculados, el texto de consulta enviado al servidor vinculado variará en función de si podemos determinar que el servidor vinculado tiene la capacidad de analizar la sintaxis.
Si determinamos que el servidor vinculado puede analizar IS [NOT] DISTINCT FROM, descodificaremos la sintaxis tal como está. Si no podemos determinar que el servidor vinculado puede analizar IS [NOT] DISTINCT FROM, decodificaremos a las siguientes expresiones:
A IS DISTINCT FROM B descodificará a: ((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 descodificará a: (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
En el ejemplo siguiente se devuelven filas donde el campo id es distinto del valor entero 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
Los resultados excluyen todas las filas donde id coincide con el valor de 17.
id message
----------- ---------
NULL hello
10 NULL
NULL NULL
B. Usar IS NOT DISTINCT FROM
En el ejemplo siguiente se devuelven filas donde el campo id no es distinto del valor entero 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
Los resultados devuelven solo las filas donde id coincide con el valor de 17.
id message
----------- --------
17 abc
17 yes
C. Usar IS DISTINCT FROM en un valor NULL
En el ejemplo siguiente se devuelven filas donde el campo id es 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
Los resultados devuelven solo las filas donde id no era NULL.
id message
----------- --------
10 NULL
17 abc
17 yes
D. Usar IS NOT DISTINCT FROM en un valor NULL
En el ejemplo siguiente se devuelven filas donde el campo id no es 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
Los resultados devuelven solo las filas donde id era NULL.
id message
----------- --------
NULL hello
NULL NULL