Tema SQL
INNER JOIN
Combina dos conjuntos de filas conservando solo las que cumplen la condición de unión; el resto se descarta. Es el tipo de JOIN más estricto y el habitual cuando solo te interesan relaciones «existentes» entre tablas.
Descripción
INNER JOIN enlaza cada fila de la tabla izquierda con las de la derecha que satisfacen ON. Si una fila de un lado no tiene pareja, no aparece en el resultado. Úsalo cuando la lógica de negocio exige que exista relación (por ejemplo solo pedidos con cliente válido). La condición ON suele igualar clave foránea con primaria, pero puede incluir filtros adicionales con AND. Diferencia ON de WHERE cuando uses OUTER JOIN; con INNER JOIN muchos planes son equivalentes, pero ON documenta la intención de unión.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT columnas
FROM tabla_a AS alias_a
INNER JOIN tabla_b AS alias_b
ON condición_de_unión
[ WHERE ... ];
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- INNER JOIN
- Palabra clave que indica unión interna: solo filas con coincidencia en ambos lados según ON. Puedes encadenar varios JOIN en el mismo FROM.
- ON
- Condición de emparejamiento (típicamente claves); puede llevar varias comparaciones unidas con AND. Se evalúa en el contexto del join antes de aplicar filtros posteriores en WHERE si los separas por legibilidad.
- Alias (AS)
- Nombre corto para cada tabla (u.nombre, p.id) que evita ambigüedad y aligera la consulta. Recomendado incluso con una sola tabla si hay subconsultas repetidas.
Ejemplos
Ejemplo 1
SELECT u.nombre, p.titulo
FROM usuarios AS u
INNER JOIN posts AS p ON p.usuario_id = u.id
WHERE u.activo = 1;
Ejemplo 2
SELECT COUNT(p.id)
FROM usuarios u
INNER JOIN posts p ON p.usuario_id = u.id
WHERE u.id = 1;
Temas relacionados
Enlaces internos para seguir leyendo: SELECT, WHERE, JOIN, GROUP BY y el resto de la referencia SQL.
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.