Consejos de SQL JOIN para principiantes
Si es un principiante y quiere saber cómo empezar a utilizar Tipos de JOIN en SQL en sus consultas, ha llegado al lugar adecuado.
El uso de la cláusula SQL JOIN
es necesario si quieres consultar varias tablas. Tarde o temprano, tendrás que utilizar más de una tabla en una consulta. Es la naturaleza de las bases de datos relacionales en general: consisten en datos que suelen guardarse en múltiples tablas; a su vez, éstas forman una base de datos. Una vez que te familiarices con las consultas básicas de SQL, es conveniente que empieces a aprender la cláusula JOIN
. Además de los consejos de este artículo, nuestro curso Tipos de JOIN en SQL puede ayudarte con esto.
En este artículo, te guiaré a través de cuatro consejos para usar la cláusula JOIN
. Pero primero, déjame mostrarte las tablas con las que trabajaremos.
Conozca las tablas
Para ayudarte con JOINs
, utilizaré tres tablas:
manufacturer
product_type
product
La tabla manufacturer
contiene los siguientes atributos:
La tabla fabricante contiene los siguientes atributos
- id - El número de identificación del fabricante en la base de datos.
- manufacturer_name - El nombre del fabricante.
La segunda tabla es product_type, que tiene estos atributos
- id - El ID del tipo de producto.
- type_name - El nombre del tipo de producto.
La última tabla es product_type, que tiene cuatro atributos
- id - El ID del producto.
- product_name - El nombre del producto.
- type - El tipo de producto; hace referencia a la tabla
- manufactured_by - El nombre del fabricante del producto; hace referencia a la tabla
¡Es el momento del primer consejo!
Consejo #1: Utilice la sintaxis explícita de JOIN
Probablemente se esté preguntando qué significa esto. No se preocupe, lo entenderá en unos momentos.
Como sabe, la cláusula JOIN
se utiliza para combinar o unir datos de dos o más tablas. Sin embargo, esta no es la única forma de unir tablas. También existe una sintaxis antigua - de antes de SQL-92 - en la que las tablas se unen enumerándolas en la cláusula FROM
. Esta sintaxis es usada por muchos principiantes, lo cual está bien y hará exactamente el mismo trabajo que una sintaxis JOIN explícita. Pero aprender la sintaxis JOIN explícita vale la pena a largo plazo. Tiene varios beneficios sobre la lista de tablas en la cláusula FROM
, de la que hablaré más adelante en este artículo.
Le mostraré cómo funcionan las uniones de tablas no explícitas. Digamos que quieres obtener una lista de productos junto con sus nombres de fabricantes. Así es como se hace enumerando dos tablas en la cláusula FROM
:
SELECT product.id, product.product_name, manufacturer.manufacturer_name FROM product, manufacturer WHERE product.manufactured_by = manufacturer.id; |
Primero he enumerado las columnas que quiero en el resultado. Son id
y product_name
de la tabla product
y manufacturer_name
de la tabla manufacturer
. A continuación, he enumerado el product
y la tabla manufacturer
tabla en la cláusula FROM
. Por último, he indicado que la columna manufactured_by
de la tabla product
debe ser igual a la columna id
de la tabla manufacturer
.
¿El resultado?
id | product_name | manufacturer_name |
---|---|---|
1 | SuperFX | QuazySoftware |
2 | UnterB | DieBeste |
3 | HyperXYZ | FabricaInfinita |
4 | TurboRay | QuazySoftware |
5 | VeryTrade | DieBeste |
6 | BlueSky | FabricaInfinita |
7 | DirtyGritty | QuazySoftware |
8 | SmoothUndertaker | DieBeste |
9 | HelioTroll | FabricaInfinita |
Puede obtener el mismo resultado utilizando la sentencia JOIN
:
SELECT product.id, product.product_name, manufacturer.manufacturer_name FROM product JOIN manufacturer ON product.manufactured_by = manufacturer.id; |
La parte SELECT
es la misma en ambas consultas. Pero en lugar de simplemente listar dos tablas en la cláusula FROM
, las he unido escribiendo explícitamente la cláusula JOIN
. Si escribes esta cláusula, es necesario especificar qué columnas se utilizarán al conectar las dos tablas. Esto se hace utilizando la cláusula ON
y conectando la columna manufactured_by
de la tabla product
con la columna id
de la tabla manufacturer
. Si te fijas, verás que la cláusula ON
funciona como la cláusula WHERE
de la consulta anterior.
¿Por qué recomiendo utilizar una sentencia explícita JOIN
? En primer lugar, esta forma le permite ver fácilmente qué tipo de unión se utiliza para combinar las tablas. Hay cuatro tipos de uniones (inner join, left join, right join y full join), que comentaré más adelante. Cuando el tipo de unión se indica explícitamente en la consulta, es más fácil entender lo que hace la consulta.
La otra razón para utilizar la sintaxis explícita de JOIN
es ver la diferencia entre las condiciones de unión y las condiciones de filtrado. Dado que la cláusula WHERE
se utiliza para filtrar datos, puede resultar confuso utilizarla para unir tablas.
Hay más ventajas de usar JOINs explícitos que no tengo espacio para cubrir; vea este artículo, que habla sobre las ventajas de Tipos de JOIN en SQL, para más detalles.
Si necesita repasar sus conocimientos básicos de SQL antes de seguir adelante, nuestro curso SQL para principiantes puede ser ideal para ello. También puedes utilizar su sección JOIN para empezar a aprender a unir tablas.
Consejo #2: Usar Alias de Tabla
Para mostrarte a qué me refiero con los alias y por qué son útiles, déjame mostrarte cómo se ve una consulta sin ellos. Si quisiera listar todos los productos y sus nombres de tipo de producto, esta es una forma de hacerlo:
SELECT product.id, product.product_name, product_type.type_name FROM product JOIN product_type ON product.type = product_type.id; |
Primero, la explicación de la consulta. Al igual que el ejemplo anterior, esta consulta selecciona las columnas id
y product_name
de la tabla product
. También selecciona la columna type_name
de la tabla product_type
. Las tablas product
y product_type
están unidas por el tipo de columna de la tabla product
y la columna id
de la tabla product_type
.
Este es el resultado:
id | product_name | type_name |
---|---|---|
1 | SuperFX | Server |
2 | UnterB | Server |
3 | HyperXYZ | Server |
4 | TurboRay | Laptop |
5 | VeryTrade | Laptop |
6 | BlueSky | Laptop |
7 | DirtyGritty | Software |
8 | SmoothUndertaker | Software |
9 | HelioTroll | Software |
Aunque esta consulta no es complicada, escribirla es engorroso. Cada vez que quiero hacer referencia a la tabla, tengo que escribir su nombre completo. Por si fuera poco, también hay una tabla cuyo nombre consta de dos palabras y un guión bajo. ¡Imagínate si hay más tablas y con nombres más largos! Sin embargo, hay una manera de hacerte la vida más fácil. En lugar de escribir los nombres completos de las tablas, puedes asignar a cada una un alias:
SELECT p.id, p.product_name, pt.type_name FROM product p JOIN product_type pt ON p.type = pt.id; |
Esta es precisamente la misma consulta que la anterior, pero utiliza los alias de las tablas en lugar de los nombres completos. Fíjate bien. He asignado los alias en las cláusulas FROM y JOIN
. Notará la diferencia; la tabla product
se llama ahora p
y la tabla product_type
se llama ahora pt
. Por supuesto, con los nombres de las tablas cambiados, estos nuevos nombres tienen que ser utilizados al seleccionar las columnas id
, product_name
, y type_name
.
Creo que la consulta ahora se ve mucho mejor. ¡Y seguro que fue más cómodo escribirla! Un consejo más: ¡utiliza alias significativos! La práctica habitual es utilizar la primera o dos letras del nombre de la tabla o la primera letra de cada palabra del nombre de la tabla. La cuestión es que su alias debe ser lo más corto posible, pero también debe parecer una elección "natural" para un alias; debe ser capaz de saber inmediatamente qué alias se refiere a qué tabla.
Consejo 3: Conozca la diferencia entre los distintos tipos de JOIN
Ya he mencionado que existen cuatro tipos básicos de JOIN
:
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
La cláusula INNER JOIN
devolverá sólo los registros coincidentes que sean iguales en ambas tablas. Observe que INNER JOIN
es lo mismo que JOIN
.
La cláusula LEFT JOIN
devuelve todos los registros de la tabla izquierda (la primera tabla, colocada después de FROM
) y sólo los registros coincidentes de la tabla derecha (la segunda tabla, colocada después de JOIN
).
Por otro lado, RIGHT JOIN
devuelve todos los registros de la tabla derecha y sólo los registros coincidentes de la tabla izquierda.
Por último, FULL OUTER JOIN
devuelve todos los registros de ambas tablas. Los registros que no coinciden se rellenan con los valores de NULL
. Esta unión devuelve potencialmente una gran cantidad de datos. Tenga en cuenta que FULL OUTER JOIN
es lo mismo que FULL JOIN
.
Puede encontrar una explicación más detallada, pero fácil de entender, en este artículo sobre los tipos de JOIN de SQL.
Sé que puede ser difícil recordar todo, especialmente si eres un principiante o no usas las uniones muy a menudo. Pero no hay necesidad de recordar todo porque está la hoja de trucos de SQL JOIN. Puedes guardarla o imprimirla y utilizarla siempre que uses la cláusula JOIN
o quieras aprender algo nuevo de un vistazo.
En la práctica, usted usará más a menudo INNER JOIN
y LEFT JOI
N, así que concentrémonos en esos dos. Ya has visto cómo utilizar INNER JOIN
en los ejemplos anteriores. Ahora le mostraré cómo funciona LEFT JOIN
.
En este ejemplo, vamos a enumerar todos los tipos de productos y los productos que pertenecen a cada categoría. Puedes hacerlo de esta manera:
SELECT pt.id, pt.type_name, p.product_name FROM product_type pt LEFT JOIN product p ON pt.id = p.type; |
Esta consulta primero selecciona las columnas deseadas; nada nuevo aquí. A continuación, une las dos tablas y les asigna un alias. He unido la tabla usando algo nuevo; la sentencia LEFT JOIN
. Sólo para recordar, esta unión selecciona todas las filas de la tabla izquierda (product_type
) y las filas coincidentes de la tabla derecha (product
). Esto es exactamente lo que necesitaba; echa un vistazo:
id | type_name | product_name |
---|---|---|
1 | Software | DirtyGritty |
1 | Software | SmoothUndertaker |
1 | Software | HelioTroll |
2 | Laptop | TurboRay |
2 | Laptop | VeryTrade |
2 | Laptop | BlueSky |
3 | Server | SuperFX |
3 | Server | UnterB |
3 | Server | HyperXYZ |
4 | Scooter | NULL |
5 | Printer | NULL |
Observe que no hay productos para las categorías "Scooter" e "Impresora". En el caso de que no haya filas coincidentes en la tabla correcta, el resultado será NULL
.
Sugerencia #4: Haga un mapa de las uniones múltiples
No está limitado a unir sólo dos tablas; puede unir tres o más tablas. Permítame mostrarle primero cómo hacerlo, y luego le daré algunos consejos útiles.
Tu tarea es listar todos los productos junto con su tipo de producto y nombre del fabricante. Este código lo hará:
SELECT p.id, p.product_name, pt.type_name, m.manufacturer_name FROM product p JOIN product_type pt ON p.type = pt.id JOIN manufacturer m ON p.manufactured_by = m.id; |
Como en los ejemplos anteriores, este código selecciona primero las columnas que se mostrarán en el resultado. La tabla product
se une a la tabla product_type
; eso ya lo has practicado. Bien, pero ahora necesitas los datos de la tabla manufacturer
¿cómo se unen? Simplemente escribe otra cláusula JOIN
y especifica la tabla deseada.
Sin embargo, aunque la unión viene después de la tabla product_type
no significa que la tabla manufacturer
esté unida a esta tabla, al menos en este caso. No, se une con la tabla product
. Esto es obvio por las columnas que he especificado; las tablas están conectadas a través de las columnas manufactured_by
de la tabla product
y id
de la tabla manufacturer
.
Este es el resultado:
id | product_name | type_name | manufacturer_name |
---|---|---|---|
1 | SuperFX | Server | QuazySoftware |
2 | UnterB | Server | DieBeste |
3 | HyperXYZ | Server | FabricaInfinita |
4 | TurboRay | Laptop | QuazySoftware |
5 | VeryTrade | Laptop | DieBeste |
6 | BlueSky | Laptop | FabricaInfinita |
7 | DirtyGritty | Software | QuazySoftware |
8 | SmoothUndertaker | Software | DieBeste |
9 | HelioTroll | Software | FabricaInfinita |
Cuando unes varias tablas, es una buena idea hacer un mapa de las tablas que quieres unir. Haz un pequeño dibujo; así es más fácil visualizar las uniones. Esto es especialmente útil si estás haciendo una unión a la izquierda o a la derecha. No tendrás que imaginarlo; la tabla que dibujas a la izquierda es tu tabla izquierda y LEFT JOIN
te dará todos los datos de la misma. La tabla que dibujas a la derecha es la tabla derecha. Parece obvio, pero es más difícil imaginarlo sin dibujar, sobre todo si eres principiante. El dibujo puede ser algo tan sencillo como esto:

Otro consejo es enumerar las columnas en la sentencia SELECT en el mismo orden en que se unen las tablas. Si miras la consulta anterior, las columnas son de las tablas product
, product_type
y manufacturer
respectivamente. Las tablas se unen precisamente en el mismo orden. Hacer esto hará que tu código sea más legible y más fácil de modificar.
Por último, pero no menos importante, une siempre las tablas en una especie de cadena. En otras palabras, cada tabla a la que te unas debe estar unida a la(s) tabla(s) que ya está(n) unida(s) en tu consulta. Si unes dos tablas y luego decides unir otra, la tercera tabla no puede quedar "suelta", sin conexión con las tablas anteriores. Asegúrese de que las condiciones de ON
vinculen la nueva tabla con las tablas previamente unidas. Aquí tienes cómo NO hacerlo:

Has aprendido bastante. Esto no es todo lo que necesitas saber sobre la unión de tres tablas, por supuesto. Hay detalles que no he mencionado y que están bien explicados en este artículo sobre uniones de varias tablas. Y ahora que sabe sobre el LEFT JOIN y la unión de múltiples tablas, ¿por qué no aprender cómo hacer un LEFT JOIN de múltiples tablas?
¿Ha aprendido esto?
Con estos consejos sobre el uso de las uniones en SQL, he tratado de hacer tus primeros pasos tan fáciles como sea posible. Has aprendido cómo unir dos tablas usando tanto la sintaxis explícita de JOIN
como la lista de tablas en la cláusula FROM
. Además, has aprendido a utilizar los alias y lo que hacen las diferentes uniones. Finalmente, te he mostrado cómo unir tres tablas. Creo que esto es un gran paso para ti en muy poco tiempo. Enhorabuena.
Entonces, ¿cómo puedes poner en práctica todos estos consejos? Este artículo sobre la práctica de Tipos de JOIN en SQL le ayudará a encontrar el enfoque más adecuado para usted. O puedes practicar utilizando nuestro SQL para principiantes o el curso Tipos de JOIN en SQL . Depende de lo detallados que quieras que sean tus conocimientos.
¿Quieres compartir tu experiencia con la unión de tablas? ¡La sección de comentarios te espera!