Uso Detallado del INNER JOIN
El INNER JOIN (Unión Interna) es el tipo de unión más común en SQL. Su
propósito es combinar filas de dos o más tablas basándose en un valor de
columna relacionado o coincidente entre ellas. El resultado es un nuevo
conjunto de resultados que contiene solo las filas que tienen una coincidencia
en ambas tablas.
1. Concepto Fundamental
Imagina que tienes dos conjuntos de datos (Tablas A y B). El INNER JOIN
actúa como la intersección en la Teoría de Conjuntos: solo devuelve los
elementos (filas) que existen en ambos conjuntos y cumplen la condición de
unión.
• Tabla de la Izquierda (A): La primera tabla mencionada en la consulta
(FROM).
• Tabla de la Derecha (B): La segunda tabla mencionada en la consulta
(INNER JOIN).
• Resultado: Solo las filas donde el valor de la columna de unión en A es
exactamente igual al valor de la columna de unión en B.
2. Sintaxis SQL
La sintaxis del INNER JOIN requiere la cláusula ON para especificar la
condición de coincidencia.
SQL
SELECT
A.columna1,
B.columna_relacionada,
...
FROM
Tabla_A AS A -- Se recomienda usar alias (A) para simplificar
INNER JOIN
Tabla_B AS B -- Se recomienda usar alias (B)
ON
A.clave_foranea = B.clave_primaria;
3. Ejemplo Práctico
Consideremos dos tablas:
• Clientes(Tabla A) con ID_Cliente (PK) y Nombre_Cliente.
• Pedidos (Tabla B) con ID_Pedido (PK), ID_Cliente (FK) y Monto.
Clientes Pedidos
ID_Cliente Nombre_Cliente ID_Pedido
1 Juan 101
2 María 102
3 Pedro 103
4 Ana
Consulta (Encontrar todos los pedidos y el nombre del cliente que los
hizo):
SQL
SELECT
C.Nombre_Cliente,
P.ID_Pedido,
[Link]
FROM
Clientes AS C
INNER JOIN
Pedidos AS P
ON
C.ID_Cliente = P.ID_Cliente;
Resultado del INNER JOIN:
Nombre_Cliente ID_Pedido Monto
Juan 101 500
Juan 102 200
Ana 103 800
Análisis del Resultado:
1. María (ID 2): Es omitida porque no tiene pedidos en la tabla Pedidos.
2. Pedro (ID 3): Es omitido porque no tiene pedidos en la tabla Pedidos.
3. Pedido 103 (ID_Cliente 4): Se incluye porque el cliente Ana (ID 4)
existe en la tabla Clientes.
4. Pedido con ID_Cliente 3 (si existiera): Sería omitido si el ID 3 no
existiera en la tabla Clientes.
4. Uso de Múltiples Joins
Puedes encadenar múltiples INNER JOINs para combinar tres o más tablas.
Esto es común en bases de datos normalizadas.
Ejemplo: Unir Clientes, Pedidos y Detalle_Pedido.
SQL
SELECT
C.Nombre_Cliente,
P.ID_Pedido,
[Link],
[Link]
FROM
Clientes AS C
INNER JOIN
Pedidos AS P
ON
C.ID_Cliente = P.ID_Cliente
INNER JOIN
Detalle_Pedido AS D
ON
P.ID_Pedido = D.ID_Pedido;
La consulta solo devolverá las filas donde haya una coincidencia en las tres
tablas.
5. Alias de Tablas (Buenas Prácticas)
El uso de alias de tablas (como C para Clientes y P para Pedidos) es una práctica
estándar y altamente recomendada por varias razones:
1. Claridad: Reduce la longitud de la consulta.
2. Necesidad: Es obligatorio cuando dos tablas unidas tienen columnas
con el mismo nombre (ej. ID_Cliente), para que el motor SQL sepa a qué
tabla pertenece la columna en la cláusula ON y en el SELECT.
1. INNER JOIN (Unión Interna)
El INNER JOIN solo devuelve los registros que tienen coincidencia de valores
en la columna de unión de ambas tablas (la intersección).
• Prioridad: Ninguna. Solo las coincidencias.
• Filas no coincidentes: Se excluyen del resultado final.
Tabla Izquierda (A) Tabla Derecha (B) Resultado
Se excluyen las filas sin par en B. Se excluyen las filas sin par en A. Solo la intersección.
Sintaxis:
SQL
SELECT *
FROM Tabla_A
INNER JOIN Tabla_B
ON Tabla_A.ID = Tabla_B.ID;
2. LEFT JOIN (Unión Externa Izquierda)
El LEFT JOIN devuelve todos los registros de la tabla izquierda (FROM
Tabla_A) y los registros coincidentes de la tabla derecha.
• Prioridad: La Tabla Izquierda es la dominante.
• Filas no coincidentes: Si un registro de la tabla izquierda no tiene par
en la tabla derecha, los campos de la tabla derecha aparecerán como
NULL.
Tabla Izquierda Tabla Derecha (B) Resultado
(A)
Todas las filas Solo se incluyen las Intersección más el resto de la
son incluidas. filas con par en A. Tabla A (con NULLs en los campos
de B).
Sintaxis:
SQL
SELECT *
FROM Tabla_A -- Esta es la tabla izquierda (la prioritaria)
LEFT JOIN Tabla_B
ON Tabla_A.ID = Tabla_B.ID;
Caso de Uso Común: Listar todos los clientes, con sus pedidos si los tienen,
y mostrar NULL en los campos de pedido si no han comprado nada.
3. RIGHT JOIN (Unión Externa Derecha)
El RIGHT JOIN devuelve todos los registros de la tabla derecha (RIGHT JOIN
Tabla_B) y los registros coincidentes de la tabla izquierda.
• Prioridad: La Tabla Derecha es la dominante.
• Filas no coincidentes: Si un registro de la tabla derecha no tiene par
en la tabla izquierda, los campos de la tabla izquierda aparecerán como
NULL.
Tabla Izquierda Tabla Derecha Resultado
(A) (B)
Solo se incluyen las Todas las filas Intersección más el resto de la
filas con par en B. son incluidas. Tabla B (con NULLs en los campos
de A).
Sintaxis:
SQL
SELECT *
FROM Tabla_A
RIGHT JOIN Tabla_B -- Esta es la tabla derecha (la prioritaria)
ON Tabla_A.ID = Tabla_B.ID;
Nota Importante: El RIGHT JOIN es, en esencia, redundante si utilizas un
LEFT JOIN y simplemente inviertes el orden de las tablas en la consulta.
• A RIGHT JOIN B es equivalente a B LEFT JOIN A.
Caso de Uso Común: Listar todos los productos (Tabla B), con sus categorías
(Tabla A), mostrando NULL en los campos de categoría si un producto está mal
ingresado sin una categoría asignada.