sábado, 26 de marzo de 2016

Receta T-SQL No. 3-8: Unión de Tablas con Columnas que Admiten Valores NULL

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Cláusula INNER JOIN
6. Práctica: Unión de Tablas con INNER JOIN
Conclusiones
Literatura & Enlaces

1. Introducción

Esta receta T-SQL es la última de la serie de -Tratamiento de Valores NULL-; en esta receta se explica cómo unir dos tablas que admiten valores NULL sobre las columnas de comparación. En la sección práctica se demuestra las sentencias T-SQL requeridas para crear tablas e insertar valores NULL en ellas, y luego unirlas usando el operador de unión INNER JOIN.

2. Palabras Clave

  • INNER JOIN
  • NULL
  • Tabla

3. Problema

Unir dos tablas que contengan columnas que admitan valores NULL.

4. Solución

Por medio de la cláusula INNER JOIN se pueden unir dos tablas que posean columnas que permiten valores NULL.

5. Discusión de la Solución

5.1 Cláusula INNER JOIN

La cláusula INNER JOIN ("Using Inner Joins", 2016) es un tipo de JOIN que une dos tablas por medio de operadores de comparación: <, <=, =, >, y >=.

Como ejemplo práctico del uso de este tipo de JOIN, se tiene el de la unión de las tablas HumanResources.Employee y Person.Person (base de datos AdventureWorks 2012); en particular, los campos BusinessEntityID de ambas tablas:

SELECT *
FROM HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON E.BusinessEntityID = P.BusinessEntityID
ORDER BY P.FirstName;

Al ejecutar esta sentencia T-SQL se obtiene como resultado (truncado):  
INNER JOIN Employee y Person
Figura 1. INNER JOIN Employee y Person.
Por otra parte, es importante agregar que los valores de las columnas de unión también pueden admitir valores NULL para la comparación. En el caso del operador de comparación =, cuando ambos valores de los campos o columnas son NULL el resultado de la evaluación es False. De lo anterior se puede inferir que las columnas retornadas por la cláusula INNER JOIN son las que no tienen ningún valor NULL y las que tienen valor distinto a NULL pero que son iguales.

6. Práctica: Unión de Tablas con INNER JOIN

Se inicia este ejemplo con la creación de dos tablas: Prueba1 y Prueba2.

CREATE TABLE Prueba1(
Campo1 NVARCHAR(32) NULL
)

CREATE TABLE Prueba2(
Campo1 NVARCHAR(32) NULL
)

A continuación, la inserción de datos de prueba sobre estas dos tablas recién creadas:

INSERT INTO Prueba1
VALUES ('Microsoft'),
('.NET Framework'),
(NULL),
(NULL);

INSERT INTO Prueba2
VALUES ('Windows'),
('.NET Framework'),
(NULL),
(NULL);

Luego, con el uso de la cláusula INNER JOIN unir estas dos tablas con la columna Campo1:

SELECT *
FROM Prueba1 P1
INNER JOIN Prueba2 P2
ON P1.Campo1 = P2.Campo1;


Resultado de esta última sentencia T-SQL:
INNER JOIN Prueba1 y Prueba2
Figura 2. INNER JOIN Prueba1 y Prueba2.
Nótese que las las columnas Campo1 de ambas tablas pueden poseer valores NULL, pero hay que apuntar que este el valor desconocido NULL no es igual a otro valor NULL; por lo tanto las columnas que contienen valores NULL no son incluidas en el resultado.

7. Conclusiones

Se demostró cómo los campos con valor NULL cuando son comparados con el operador de igualdad = no incluye los registros de las columnas de comparación en una cláusula INNER JOIN.

En la siguiente receta T-SQL se inicia la serie de consultas sobre múltiples tablas.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach. United States: Apress.
Using Inner Joins (2016, marzo 25). Recuperado desde: https://technet.microsoft.com/en-us/library/ms190014(v=sql.105).aspx


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.