SQL y Consultas de Datos · Bases de Datos

JOIN entre tablas

Combinar filas de varias tablas mediante los distintos tipos de JOIN y predecir el efecto de cada uno sobre el número de filas del resultado.

JOIN entre tablas

Diagrama de SQL: tablas unidas con JOIN, filtrado SELECT y agregacion GROUP BY.
SQL: consultas, joins, agregacion y optimizacion de consultas.

Mapa conceptual

Volver a coser los datos Una base relacional separa la información en tablas para no repetirla. El JOIN es el pegamento: reconecta filas de tablas distintas usando claves compartidas. Elegir el tipo de JOIN correcto decide si pierdes o conservas registros.

Clave primaria y foránea

Una clave primaria identifica sin ambigüedad cada fila de una tabla. Una clave foránea en otra tabla apunta a esa primaria y establece la relación. El JOIN se hace, casi siempre, igualando la foránea de una tabla con la primaria de la otra.

JOIN interior

El JOIN interior devuelve solo las parejas de filas que encajan: si una fila de un lado no tiene contrapartida en el otro, desaparece del resultado. Es el tipo por defecto y el más habitual, pero atenúate a su naturaleza: filtra, no conserva.

JOIN exterior izquierdo y derecho

Un JOIN exterior izquierdo conserva todas las filas de la tabla izquierda, rellenando con NULL los campos del lado derecho cuando no hay coincidencia. El derecho es simétrico. Sirve para «todo mi catálogo, y si tiene pedido, muéstralo», sin perder los productos sin ventas.

JOIN exterior completo

El FULL JOIN conserva las filas de ambos lados, con NULL donde falte contrapartida. Es útil para cuadrar dos listas y ver qué falta en cada una, aunque no todos los motores lo implementan de forma idéntica.

Cruce y auto-unión

¿Cuántas filas salen?

Un JOIN sobre una clave primaria única no crea ni destruye filas del lado de la primaria: cada fila aparece a lo sumo una vez. Pero si la clave de unión se repite en un lado, las filas se multiplican por el número de coincidencias. Ese es el origen de los doble conteos en informes.

La condición ON frente a WHERE

En un JOIN exterior, lo que pongas en ON filtra las coincidencias pero conserva las filas no emparejadas; lo mismo en WHERE eliminaría los NULL y convertiría el exterior en un interior disfrazado. El lugar de la condición cambia el resultado, sobre todo con JOIN exteriores.

Anatomía de una unión

  1. Identifica la clave que conecta ambas tablas.
  2. Decide qué tabla es la que quieres conservar íntegra (para elegir el lado del exterior).
  3. Escribe la condición de igualdad en ON.
  4. Revisa el conteo de filas: un salto sospechoso delata una clave no única.

Nulls y JOIN

NULL nunca coincide con NULL en una igualdad de JOIN, porque desconocido no es igual a desconocido. Dos filas con clave nula jamás se emparejarán. Si necesitas casar nulos, hay que transformarlas a un valor centinela antes de comparar.

La elección del JOIN es una decisión sobre qué datos no quieres perder.
Tipo de JOINConservaÚtil para
INNERsolo las coincidenciaspares que existen en ambos lados
LEFTtodo el lado izquierdocatalogar sin perder filas sin relación
RIGHTtodo el lado derechosimétrico del anterior
FULLambos lados íntegroscuadrar y ver faltantes

Haces un LEFT JOIN de clientes hacia pedidos. ¿Qué contiene el resultado?

Muchos a muchos

Una relación muchos a muchos se resuelve con una tabla intermedia que parta la relación en dos muchos-a-uno. Unir alumno y asignatura pasa por la tabla de matrícula: dos JOIN encadenados. Sin esa tabla puente no hay forma limpia de representar la relación.

Encadenar JOIN

Se pueden unir varias tablas en una misma consulta encadenando JOIN. El motor los resuelve de izquierda a derecha; si el resultado sorprende, ve añadiendo un JOIN a la vez y comprobando conteos, en lugar de escribir cinco de golpe.

Ambigüedad de columnas

Cuando dos tablas comparten nombre de columna, hay que calificarlas con el alias de tabla: cliente id frente a pedido id. No hacerlo lanza un error de columna ambigua y hace la consulta ininteligible.

Rendimiento de la unión

Unir por columnas indexadas es mucho más barato que por columnas sin índice o por funciones. Uniones sobre claves ajenas sin índice obligan a barridos completos. En bases grandes, el orden y la calidad de los JOIN manda en el tiempo de ejecución.

Errores frecuentes

Un INNER JOIN siempre devuelve al menos tantas filas como la tabla más pequeña de las dos.

Verificar una unión

Después de un JOIN sospechoso, compara el conteo antes y después, y cuenta filas duplicadas de la clave. Un total que crece más de lo esperado señala una unión con clave no única. Validar la cardinalidad es parte de escribir SQL correcto, no un extra.

Tipos de JOIN

Conserva solo coincidencias
INNER JOIN
Conserva toda la izquierda
LEFT JOIN
Conserva ambos lados
FULL JOIN
Producto cartesiano
CROSS JOIN
Une una tabla consigo misma
SELF JOIN

Ordena el proceso para unir dos tablas correctamente:

Clave
Tipo
Condicion
Conteo

SQLZoo
Práctica visual de JOIN con conjuntos de datos pequeños.

Tienes clientes y pedidos y quieres listar todos los clientes, incluidos los que nunca compraron. ¿Qué JOIN usas y por qué un INNER no serviría? ¿Dónde pondrías el filtro de país, en ON o en WHERE?

SQLZoo
Ejercicios interactivos de SQL en línea.