Tipos de JOIN en SQL: explicación básica y ejemplos

En respuesta a las lecciones anteriores de SQL, miembros de Newsmatic, incluyendo a Michael M. y Jason P., han dejado comentarios pidiendo una explicación básica sobre los tipos de JOINs disponibles en SQL.

Índice de Contenido
  1. JOINs en SQL: Herramienta para encontrar información
  2. INNER JOINs: Registros coincidentes solamente
  3. La versión INNER JOIN de la consulta
  4. LEFT JOIN: Registros coincidentes más registros huérfanos de la tabla izquierda
  5. RIGHT JOIN: Registros coincidentes más registros huérfanos de la tabla derecha

JOINs en SQL: Herramienta para encontrar información

Si utilizas la línea de comandos de SQL para analizar los registros de tus tablas, descubrirás que un JOIN puede ser la mejor herramienta para encontrar la información que necesitas. En este artículo, explicaré los tipos básicos de JOINs y cómo funcionan.

INNER JOINs: Registros coincidentes solamente

En el artículo "Another crash course in SQL" de diciembre de 2001, te mostré una forma de extraer información de dos tablas en una sola declaración. En la mayoría de las implementaciones de SQL, obtienes información de dos tablas utilizando un comando SELECT en esta forma:

SELECT tabla1.columna1, tabla1.columna2,
tabla2.columna1, tabla2.columna2
FROM tabla1, tabla2
WHERE tabla1.campoclave=tabla2.campoclave

Cuando ejecutas una declaración como esta, SQL crea una nueva tabla, el conjunto de registros de resultados, basándose en el contenido de tabla1 y tabla2. Especificas qué campos de las dos tablas quieres ver en los resultados. Pero, ¿cuántas filas (registros) contendrá la nueva tabla?

La respuesta depende de la cláusula WHERE. En esta muestra de declaración, la condición (tabla1.campoclave=tabla2.campoclave) indica a SQL que busque registros en ambas tablas que contengan valores coincidentes en la columna especificada por campoclave. Si una de las tablas contiene registros huérfanos, es decir, registros para los cuales no hay un registro correspondiente con un valor coincidente en la otra tabla, esos registros se ignoran.

Para ilustrar este comportamiento, considera las dos tablas que se muestran en la Figura A.

Funciones y cláusulas de la instrucción SELECT en SQL: Guía completa

Tipos de JOIN en SQL: explicación básica y ejemplos - Gestión de datos | Imagen 1 Newsmatic

Observa que la tabla Donors contiene cinco registros, cada uno representando a una persona diferente. La tabla DonationRecords contiene entradas en la columna DonorID para Jeff (DonorID 1), Kim (DonorID 2) y Angela (DonorID 3), así como tres entradas para alguien cuyo DonorID es 6.

Ahora, considera qué sucede cuando ejecutas el siguiente comando SQL:

SELECT Donors.DonorID, Donors.Donorname,
DonationRecords.DonationAmt
FROM Donors, DonationRecords
WHERE Donors.DonorID=DonationRecords.DonorID

La Figura B muestra los resultados de esta consulta. Observa que, debido a que la cláusula WHERE especifica que las entradas en los campos DonorID deben coincidir para que los registros se incluyan en el conjunto de registros, los registros de donación para la persona cuyo DonorID es 6 se ignoran.

Tipos de JOIN en SQL: explicación básica y ejemplos - Gestión de datos | Imagen 2 Newsmatic

En un entorno ideal, no permitirías que los registros huérfanos se incluyan en tu tabla DonationRecords. Sin embargo, este ejemplo proviene de un caso del mundo real en el que mi cliente esperaba que limpiara datos sucios o faltantes. En este caso, revisé la documentación en el archivo de donaciones para determinar a qué nombre se debía asociar el DonorID 6. Cuando lo averigüé, introduje ese nombre en la tabla Donors.

Cómo utilizar las herramientas de transformación de datos en Microsoft SQL Server 2000Cómo utilizar las herramientas de transformación de datos en Microsoft SQL Server 2000

La versión INNER JOIN de la consulta

Este tipo de consulta, en la que los resultados solo contienen registros que tienen valores coincidentes en ambas tablas, se conoce como un INNER JOIN. Para usar la sintaxis INNER JOIN, deberías reescribir la consulta de esta forma:

SELECT Donors.DonorID, Donors.Donorname,
DonationRecords.DonationAmt
FROM Donors INNER JOIN DonationRecords
ON Donors.DonorID = DonationRecords.DonorID;

La frase FROM Donors INNER JOIN DonationRecords ON indica a SQL que busque registros coincidentes entre las dos tablas, basándose en la expresión que sigue a la palabra clave ON. Esta expresión se parece mucho a la expresión que utilicé en la cláusula WHERE en el primer ejemplo.

Para decidir cuál de los dos enfoques utilizar, debes tener en cuenta la versión de SQL que estás utilizando. En algunos casos, la sintaxis INNER JOIN ayuda a procesar los datos de manera más eficiente.

LEFT JOIN: Registros coincidentes más registros huérfanos de la tabla izquierda

¿Qué hace que un LEFT JOIN sea diferente de un INNER JOIN? Cuando ejecutas una consulta utilizando la sintaxis LEFT JOIN, SQL hace dos cosas:

  • Retorna todos los registros de ambas tablas que contienen valores coincidentes, tal como está definido por la cláusula ON.
  • También retorna todos los registros de la tabla del lado izquierdo de las palabras clave FROM…LEFT JOIN, aunque no existan valores coincidentes en la tabla del lado derecho.

En este ejemplo, el LEFT JOIN responde a la siguiente pregunta de negocio: ¿Hay alguien en nuestra lista de donantes que aún no haya hecho una donación?

Para ilustrar cómo funciona un LEFT JOIN, simplemente cambiemos INNER JOIN por LEFT JOIN en nuestra declaración SELECT original, de esta forma:

Cómo utilizar subselects en SQL para optimizar tus consultas
SELECT Donors.DonorID, Donors.Donorname,
DonationRecords.DonationAmt
FROM Donors LEFT JOIN DonationRecords
ON Donors.DonorID = DonationRecords.DonorID;

Cuando ejecutas esta declaración, obtendrás resultados como los mostrados en la Figura C. Debido a que se mencionó primero la tabla Donors, es decir, está a la izquierda de la construcción FROM…ON, el LEFT JOIN devuelve registros para Mary y Shawna, Donor IDs 4 y 5 respectivamente, incluso si no existen registros correspondientes en la tabla DonationRecords.

Tipos de JOIN en SQL: explicación básica y ejemplos - Gestión de datos | Imagen 3 Newsmatic

RIGHT JOIN: Registros coincidentes más registros huérfanos de la tabla derecha

Cuando ejecutas una consulta utilizando la sintaxis RIGHT JOIN, SQL hace dos cosas:

  • Retorna todos los registros de ambas tablas que contienen valores coincidentes, tal como está definido por la cláusula ON.
  • También retorna todos los registros de la tabla del lado derecho de las palabras clave FROM…RIGHT JOIN, aunque no existan valores coincidentes en la tabla del lado izquierdo.

Ilustremos cómo funciona el RIGHT JOIN cambiando LEFT JOIN por RIGHT JOIN en nuestra consulta SELECT de ejemplo:

SELECT Donors.DonorID, Donors.Donorname,
DonationRecords.DonationAmt
FROM Donors RIGHT JOIN DonationRecords
ON Donors.DonorID = DonationRecords.DonorID;

Esta declaración produce resultados como los mostrados en Figure D. Debido a que la tabla DonationRecords fue mencionada en segundo lugar, es decir, a la derecha de la construcción FROM...ON, el RIGHT JOIN devuelve registros para el DonorID 6, incluso si no existe un registro correspondiente en la tabla Donors para alguien con ese número de ID.

Tipos de JOIN en SQL: explicación básica y ejemplos - Gestión de datos | Imagen 4 Newsmatic

El poder y la importancia del lenguaje SQL en el desarrollo de software

Aunque existen otros tipos de JOINs admitidos por diferentes versiones de SQL, la mayoría de las implementaciones de SQL aceptan las construcciones INNER JOIN, LEFT JOIN y RIGHT JOIN. Una vez que hayas comprendido cómo funcionan estas tres consultas, pueden ser herramientas muy útiles para encontrar y corregir registros huérfanos (u otros datos incorrectos) en tus tablas.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Tipos de JOIN en SQL: explicación básica y ejemplos , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.