La Guía Completa de los Tipos de JOIN en SQL
El mundo de las bases de datos relacionales está diseñado sobre la primicia de la normalización: romper la información en piezas separadas (tablas) para evitar la duplicidad y salvaguardar la integridad estructural de los sistemas. Sin embargo, para que los sistemas de negocio funcionen, necesitamos poder ensamblar esos fragmentos dispersos bajo demanda.
Es allí donde entra la familia de comandos JOIN. A nivel abstracto, todos los Joins son operaciones matemáticas matriciales de la teoría de conjuntos, los famosos Diagramas de Venn, que nos determinan exactamente qué datos prevalecen y cuáles se excluyen a la hora de cruzar dos tablas.
Hagamos un recorrido a profundidad, desde los más usados en la industria hasta los más exóticos, analizando cómo el motor procesa verdaderamente dicha información.
1. El Fundamento: INNER JOIN (La Intersección)
Si leíste el post anterior dedicado exclusivamente a este tema, ya conocerás el comportamiento de este motor. Todo sobre los Inner Joins.
Visualmente representa la intersección pura central de un diagrama matemático. Solo las filas de la “Tabla A” que posean un equivalente perfecto (basado en la cláusula ON) en la “Tabla B” formarán parte del conjunto de respuesta. Cualquier registro huérfano de cualquiera de las dos tablas es purgado de la memoria durante la consulta.
2. El Rey de los Reportes: LEFT (OUTER) JOIN
Si el INNER JOIN exige equidad para ambos bandos, la cláusula LEFT JOIN toma un partido firme. Declarará inquebrantable e inalterable a la tabla que declares a la “izquierda” de la sentencia (la tabla que vas inmediatamente después del FROM).
El LEFT JOIN devolverá de manera absoluta todos los registros de la Tabla A, sin excepción. Posteriormente, intentará ubicar las filas correspondientes cruzadas en la Tabla B. Donde exista la relación, acoplará los datos; pero en los registros de la Tabla A que carezcan de equivalente, en vez de borrarlos como haría el Inner Join, la base de datos rellenará los campos de la Tabla B con valores NULL computacionales.
NOTE
Escribir explícitamente LEFT OUTER JOIN o simplemente LEFT JOIN instruye lógicamente al motor a ejecutar exactamente la misma función algorítmica. La palabra “OUTER” es totalmente redundante hoy en día, pero pertenece al estándar ANSI-92, de ahí que sea legal colocarla.
SELECT
c.id_cliente,
c.nombre_empresa,
f.numero_factura,
f.monto_total
FROM
clientes c -- La tabla fuerte (Izquierda). JAMÁS se cortan los clientes.
LEFT JOIN
facturas f -- La tabla anexada (Derecha).
ON c.id_cliente = f.id_cliente;
Por qué lo amamos:
Es el arquitecto de las auditorías. Usando el query superior tendríamos instantáneamente un reporte listando de lado izquierdo nuestra abultada base de todos los clientes, y de lado derecho el estatus de sus facturas. Podríamos visualizar qué clientes están activos y pagan de inmediato, pero fundamentalmente logramos observar qué clientes tienen el apartado derecho con campos NULL: aquellos usuarios registrados a los cuales jamás se les ha facturado aún.
3. El Ignorado: RIGHT (OUTER) JOIN
La estructura condicional algorítmica detrás de este cruce es exactamente la imagen reflejada del LEFT JOIN.
El RIGHT JOIN declara absoluto el protagonismo de la tabla a la “derecha” (la que dictes tras la cláusula JOIN), solicitando la retención global de sus registros, arrojando valores NULL del lado izquierdo si no existiesen correlaciones directas de equivalencia.
SELECT
id_pedido,
fecha_entrega,
e.nombre_repartidor
FROM
pedidos p
RIGHT JOIN
empleados e
ON p.id_repartidor = e.id_empleado;
TIP
¿Por qué nadie usa el RIGHT JOIN en la industria formal del Software? Computacionalmente rinden igual de bien. Nuestro abandono total respecto al RIGHT JOIN recae en el sistema neuronal cognitivo occidental. Al leer de izquierda a derecha (y programar de arriba hacia abajo), los programadores prefieren mil veces invertir el orden de los párrafos en su código construyendo mentalmente un LEFT JOIN natural, que mantener un cruce con RIGHT JOIN que ocasione un esfuerzo mental contraintuitivo para todo el equipo que audite posteriormente el fragmento del código.
4. La Superposición Total: FULL (OUTER) JOIN
Pise con cuidado en estos territorios, porque los cruces dimensionales totales no le temen a los reportes pequeños. Un FULL JOIN retiene, sin contemplaciones, las filas completas de ambos costados del Venn.
Cuando el motor halla una equivalencia, une las filas con perfecta sincronía. Pero si identifica anomalías cruzadas, devolverá las filas de “A” anexando variables nulas en B, y acto seguido, arrojará las filas divergentes de “B” anexando entidades truncadas a NULL de lado “A”.
SELECT
s.nombre_sistema AS sistema_legacy,
m.nombre_sistema AS sistema_nube_nuevo,
s.id_licencia
FROM
software_antiguo s
FULL JOIN
software_moderno m
ON s.id_licencia = m.id_licencia;
Su caso matriz de uso recae principalmente en el ecosistema corporativo Data Warehouse y ETL (Extract, Transform, Load). Cuando una corporación unifica o adquiere servidores de otro sistema fragmentado y requiere la visualización analítica total a macro escala de qué migró correctamente, qué registros antiguos quedaron sin actualizarse y qué identificadores novedosos aún carecen de historia legacy, un FULL JOIN logra la orquestación magnifica en una sola pasada.
5. El Producto Cartesiano: CROSS JOIN
Ninguna cláusula en SQL impone tanto pánico a los optimizadores y administradores de memoria RAM que un indomable CROSS JOIN.
El CROSS JOIN ignora completamente la filosofía armónica del cruce relacional y se deshace de la condición ON. Su único mandato algorítmico es iterar una y cada una de las filas de la primera tabla, cruzándolas físicamente con TODAS las filas individuales de la segunda tabla existente.
SELECT
p.modelo_camisa,
c.nombre_color,
t.abreviatura_talla
FROM
productos p
CROSS JOIN
colores c
CROSS JOIN
tallas t;
La matemática lo vuelve terrorífico e increíble:
Si tienes 5 modelos en stock, de 4 colores y fabricadas en 3 tallas diferentes (S, M, L), el CROSS JOIN devolverá instantáneamente un grid combinatorio gigantesco con exactamente 60 filas (5 * 4 * 3).
A pesar de que el cruce cartesiano de dos tablas masivas con cientos de miles de registros fundiría el CPU del servidor relacional, en escenarios hiper-específicos de comercio electrónico (donde un script debe “generar el listado infinito de TODAS las combinaciones de variantes (SKUs) de venta”), un comando prudente de este linaje soluciona el desafío con una elegancia implacable.
Comprender la sintaxis base del SQL te hace apto. Gobernar las distintas iteraciones posicionales de los JOINS y su comportamiento matemático interno en la memoria subyacente de la computadora es lo que forja a un arquitecto de bases de datos.