JOIN entre tablas

Mapa conceptual
- SQL
- Básico
- SELECT
- WHERE
- ORDER BY
- JOINs
- INNER
- LEFT
- FULL
- Agregación
- GROUP BY
- HAVING
- Avanzado
- Subconsultas
- CTEs
- Ventana
- Rendimiento
- EXPLAIN
- Índices
- Básico
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
- CROSS JOIN produce el producto cartesiano: cada fila con cada fila. Potente para generar combinaciones, peligroso sin filtro porque el tamaño se multiplica.
- Un self join une una tabla consigo misma, por ejemplo para relacionar empleado con su jefe dentro de la misma tabla.
- Un JOIN desigual usa condiciones de rango, como igualar un valor a una banda de una tabla de tramos.
¿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
- Identifica la clave que conecta ambas tablas.
- Decide qué tabla es la que quieres conservar íntegra (para elegir el lado del exterior).
- Escribe la condición de igualdad en ON.
- 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.
| Tipo de JOIN | Conserva | Útil para |
|---|---|---|
| INNER | solo las coincidencias | pares que existen en ambos lados |
| LEFT | todo el lado izquierdo | catalogar sin perder filas sin relación |
| RIGHT | todo el lado derecho | simétrico del anterior |
| FULL | ambos lados íntegros | cuadrar 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
- Usar INNER cuando se querían conservar las filas sin coincidencia.
- Poner la restricción de un exterior en WHERE y vaciar las filas con NULL.
- Unir por una clave no única y duplicar filas sin darse cuenta.
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
Toca una tarjeta para ver la respuesta.
Ordena el proceso para unir dos tablas correctamente:
Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.
SQLZooPrá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?
Tu texto se guarda sólo en este dispositivo.
SQLZooEjercicios interactivos de SQL en línea.
Comentarios
Inicia sesión para comentar.
Todavía no hay comentarios. Sé la primera persona en opinar.