Inner vs left join en SQL
Clase 17 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
CREATE
INSERT
Bash y archivos SQL
SELECT
Consultas en MySQL
Contenido Bonus
Aprende a dominar los joins en SQL con ejemplos prácticos y enfoque claro. Verás por qué el join explícito mejora la lectura, cómo evitar ambigüedad de columnas, cuándo usar inner join vs left join, y cómo contar resultados con group by y count sin perder información útil como los cero.
¿Qué diferencia hay entre inner join implícito y explícito?
Usar inner join es el comportamiento por defecto. Existe una forma implícita que cruza tablas con select y condición en where. Funciona en MySQL, pero el join explícito mejora la lectura al dejar claro qué tablas se unen y con qué condición. Además, obliga a escribir la línea de unión después de cada join, reduciendo errores.
Ventajas del join explícito. - Es más legible y mantenible. - Obliga a escribir la condición on por cada unión. - Evita “olvidar” condiciones de cruza. - MySQL tolera el implícito, pero no lo promueve.
Ejemplo de join implícito (equivale a un inner join).
SELECT B.title, A.name
FROM authors AS A, books AS B
WHERE A.author_id = B.author_id
LIMIT 10;
Ejemplo de join explícito (más claro y recomendado).
SELECT B.title, A.name
FROM books AS B
INNER JOIN authors AS A ON A.author_id = B.author_id
LIMIT 10;
El uso combinado de inner join y left join cubre “noventa y muchos por ciento” de los casos. El right join puede ser el inverso del left join, pero rara vez se necesita.
¿Cómo evitar ambigüedad y ordenar resultados con order by?
Al unir varias tablas, los nombres pueden ser ambiguos. Prefija siempre con el alias de tabla: A.author_id o B.author_id. Esto evita errores donde el motor no sabe a qué columna te refieres.
Sobre el orden, order by define cómo se devuelven las filas. Por defecto es ascendente (asc). También puedes ordenar descendente (desc) y por columnas numéricas o alfanuméricas.
Ejemplos de ordenamiento.
-- Filtra autores 1–5 y ordena por ID descendente
SELECT A.name, B.title
FROM authors AS A
INNER JOIN books AS B ON B.author_id = A.author_id
WHERE A.author_id BETWEEN 1 AND 5
ORDER BY A.author_id DESC;
-- Orden alfabético por nombre, descendente
SELECT A.name, B.title
FROM authors AS A
INNER JOIN books AS B ON B.author_id = A.author_id
WHERE A.author_id BETWEEN 1 AND 5
ORDER BY A.name DESC;
Punto clave sobre el orden en aplicaciones. - El orden se garantiza en la base de datos hasta tu programa. - Luego depende del lenguaje y sus estructuras (por ejemplo, algunos hashes no preservan orden).
¿Por qué el left join y el group by con count revelan ausencias útiles?
Con left join usas una tabla pivote (autores) y cruzas con la secundaria (libros). Así obtienes todos los autores del rango, incluso si no tienen libros, y verás valores NULL en columnas sin coincidencia. Recuerda: NULL no es vacío; significa “no hay dato”.
Ejemplo que muestra autores 1–5 aunque no tengan libros.
SELECT A.name, A.nationality, B.title
FROM authors AS A
LEFT JOIN books AS B ON B.author_id = A.author_id
WHERE A.author_id BETWEEN 1 AND 5
ORDER BY A.author_id ASC;
Comparación útil. - Con inner join salían 6 filas: se excluye a quien no tiene libros. - Con left join salían 7 filas: aparece “Chuck Palahniuk” con valores NULL en libros.
Para contar libros por autor, usa funciones agrupadas: count con group by sobre el identificador numérico del autor. Así consolidarás múltiples filas en una sola por autor.
Conteo de libros por autor con left join para incluir ceros.
SELECT A.name, A.nationality, COUNT(B.book_id) AS total_libros
FROM authors AS A
LEFT JOIN books AS B ON B.author_id = A.author_id
GROUP BY A.author_id
ORDER BY A.author_id ASC;
Resultados esperados del ejemplo. - Julio Cortázar, Argentina, 1. - Octavio Paz, México, 1. - Arthur Conan Doyle, Gran Bretaña, 3. - Chuck Palahniuk, 0. - Juan Rulfo, 1.
Aprendizaje clave. - Cambia left join por inner join y verás desaparecer a quien no tiene coincidencias. - Saber que alguien tiene “0” es más útil que no verlo. La ausencia informada mejora el corazón de la aplicación. - Usa limit para acotar muestras, where para condiciones, y elige group by sobre IDs numéricos para mayor confiabilidad.
¿Te gustaría probar más casos de negocio con joins y agregaciones? Cuéntame qué consulta necesitas y la diseñamos paso a paso.