Clausula DISTINCT y NULL

Mié, 17/01/2018 - 15:49 -- jsequeiros

DISTINCT devuelve una lista única o distinta de valores de cada columna especificada en una instrucción SELECT. Si hay valores duplicados en la lista, se eliminarán todos los valores duplicados excepto uno. Por ejemplo, si ejecuta la siguiente consulta, el resultado devuelve una lista de productos con algunos de los nombres de productos repetidos varias veces:

USE AdventureWorks2012;
SELECT
p.Name AS ProductName
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail sd
ON p.ProductID = sd.ProductID

Al colocar DISTINCT inmediatamente después de la palabra clave SELECT, elimina los duplicados de la lista. Además, si desea limitar el resultado a solo productos que no se han enviado, agregue la cláusula WHERE. En este ejemplo, la cláusula WHERE debe identificar todas las filas de SalesOrderProduct que contienen NULL CarrierTrackingNumber.

El valor NULL es un valor especial. En realidad, no es un valor en absoluto, es la ausencia de un valor. Como resultado, hay valores de comparación especiales que se pueden usar al hacer referencia a ellos en una cláusula WHERE. Si está buscando NULLs, usaría lo siguiente:

WHERE <column name> IS NULL

Si está buscando columnas que NOT NULLs, debería usar esto:

WHERE <column name> IS NOT NULL

En este ejemplo, está buscando todos los productos que no se han enviado, en otras palabras, todas las filas en el conjunto de resultados que tienen un valor NULO para la columna SalesOrderDetail CarrierTrackingNumber.

El siguiente paso es eliminar todas las columnas, si las hay, además de la columna Nombre del producto de la lista de columnas. De lo contrario, la distinción de cada fila se basará en todas las columnas de la instrucción SELECT en lugar de únicamente en la columna Nombre del producto. Finalmente, si aún no se ha incluido, coloque la palabra clave DISTINCT entre la palabra clave SELECT y el nombre de la columna.

Escribir una consulta que incluya DISTINCT

1. Abra el editor de consultas en SSMS.

2. En el editor de consultas, ingrese y ejecute el siguiente código T-SQL:

--Utilice esta consulta para devolver una lista distinta de productos que no se han enviado
USE AdventureWorks2012;
SELECT DISTINCT
p.Name AS ProductName
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail sd
ON p.ProductID = sd.ProductID
WHERE
sd.CarrierTrackingNumber IS NULL
order by productname

Resultados de la consulta:

Clausula DISTINCT y NULL en SQL Server

Post new comment