INNER JOIN
En el mundo real, los datos NO están en una sola tabla. Los clientes están en una tabla, sus cuentas en otra, las transacciones en otra. JOIN es la operación que las conecta usando una columna en común (típicamente un ID). Es la habilidad SQL más importante después de SELECT.
Concepto teórico
¿Por qué múltiples tablas?
Las bases de datos relacionales dividen la información en tablas separadas para evitar redundancia. En vez de repetir "García, Buenos Aires, DNI 30123456" en cada transacción, guardás los datos del cliente UNA vez y los conectás con un ID:
TABLA clientes: id=1, nombre='García', ciudad='BsAs' TABLA cuentas: id=101, cliente_id=1, tipo='CA$', saldo=150000 TABLA transacc: id=5001, cuenta_id=101, tipo='depósito', monto=50000
El campo cliente_id en la tabla de cuentas es una clave foránea (FK) que apunta al
id de la tabla de clientes. JOIN usa esta relación para combinar los datos.
INNER JOIN — solo las coincidencias
INNER JOIN devuelve SOLO las filas que tienen coincidencia en AMBAS tablas. Si un cliente no tiene
cuentas, no aparece. Si una cuenta no tiene cliente válido, tampoco.
SELECT c.nombre, cu.tipo, cu.saldo FROM clientes c INNER JOIN cuentas cu ON c.id = cu.cliente_id;
FROM clientes c— tabla principal con aliascINNER JOIN cuentas cu— tabla que se une con aliascuON c.id = cu.cliente_id— la condición de conexión (qué columnas coinciden)
c para clientes, cu para cuentas) para no escribir el nombre completo cada vez. Son
obligatorios cuando ambas tablas tienen columnas con el mismo nombre (c.id vs cu.id).
JOIN con más de 2 tablas
Podés encadenar múltiples JOINs para conectar 3 o más tablas:
SELECT c.nombre, cu.tipo, t.monto, t.fecha FROM clientes c INNER JOIN cuentas cu ON c.id = cu.cliente_id INNER JOIN transacciones t ON cu.id = t.cuenta_id;
JOIN + WHERE + GROUP BY
Los JOINs se combinan con todas las cláusulas que ya conocés:
SELECT c.ciudad, COUNT(*) AS transacciones, SUM(t.monto) AS total FROM clientes c INNER JOIN cuentas cu ON c.id = cu.cliente_id INNER JOIN transacciones t ON cu.id = t.cuenta_id WHERE c.activo = 1 GROUP BY c.ciudad HAVING SUM(t.monto) > 100000 ORDER BY total DESC;
Ejemplos explicados paso a paso
Ejemplo 1: INNER JOIN básico — dos tablas
Hacé clic en ▶ Ejecutar
Ejemplo 2: JOIN con 3 tablas
Hacé clic en ▶ Ejecutar
Ejemplo 3: JOIN + GROUP BY — análisis cruzado
Hacé clic en ▶ Ejecutar
Ejemplo 4: JOIN + WHERE + HAVING
Hacé clic en ▶ Ejecutar
Ejemplo 5: JOIN para encontrar el cliente con más cuentas
Hacé clic en ▶ Ejecutar
Referencia rápida
| Concepto | Sintaxis |
|---|---|
| INNER JOIN | FROM t1 INNER JOIN t2 ON t1.col = t2.col |
| Alias | FROM clientes c INNER JOIN cuentas cu |
| 3 tablas | ... JOIN t2 ON ... JOIN t3 ON ... |
| JOIN + WHERE | WHERE filtra filas después del JOIN |
| JOIN + GROUP BY | Agregar datos combinados |
| COUNT(DISTINCT) | Contar entidades únicas tras JOIN |
Ejercicios
Ejercicio 1: JOIN de 2 tablas
Uní clientes con cuentas y mostrá nombre + saldo. Debe incluir García.
Hacé clic en ▶ Ejecutar
Ejercicio 2: JOIN con WHERE
Mostrá solo las cuentas de clientes de Buenos Aires. Debe incluir 890000.
Hacé clic en ▶ Ejecutar
Ejercicio 3: JOIN con alias y ORDER BY
Uní clientes y cuentas, ordená por saldo DESC. Debe incluir Pérez primero.
Hacé clic en ▶ Ejecutar
Ejercicio 4: Saldo total por cliente
Un cliente puede tener varias cuentas. Calculá el saldo total de cada uno con GROUP BY. Debe incluir
655000.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Conteo de cuentas por cliente
¿Cuántas cuentas tiene cada cliente? Debe incluir 3.
Hacé clic en ▶ Ejecutar
Ejercicio 6: JOIN de 3 tablas
Uní clientes → cuentas → transacciones. Mostrá nombre, tipo de operación y monto. Debe incluir
depósito.
Hacé clic en ▶ Ejecutar
Ejercicio 7: JOIN + GROUP BY por ciudad
Saldo total y promedio por ciudad usando JOIN de clientes+cuentas. Debe incluir Buenos Aires.
Hacé clic en ▶ Ejecutar
Ejercicio 8: JOIN + HAVING
Mostrá solo clientes con saldo total > $500K. Debe incluir Pérez.
Hacé clic en ▶ Ejecutar
Ejercicio 9: JOIN + CASE WHEN + categoría
Uní clientes con cuentas, clasificá por saldo total (Alto > 500K, Medio > 200K, Bajo). Debe incluir
Alto.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Reporte ejecutivo multi-tabla
Uní 3 tablas (clientes, cuentas, transacciones). Mostrá por cada cliente: nombre, ciudad, saldo total de
cuentas, cantidad de transacciones y monto total transaccionado. Debe incluir
total_transaccionado.
Hacé clic en ▶ Ejecutar
Resumen y conexión
INNER JOINcombina filas de 2+ tablas usando una columna en común (ON).- Solo devuelve filas con coincidencia en AMBAS tablas.
- Usá alias de tabla (
c,cu) para claridad y para resolver ambigüedades. - Podés encadenar múltiples JOINs para unir 3+ tablas.
- JOIN se combina con WHERE, GROUP BY, HAVING y ORDER BY normalmente.
En la siguiente lección (08 · LEFT, RIGHT y FULL JOIN) vas a aprender los JOINs que incluyen filas SIN coincidencia — cruciales para encontrar "los que NO tienen".