Volver a la lista de artículos Artículos
Lectura de 8 minutos

Cómo unir tablas en SQL sin usar JOINs

Así es como puede combinar tablas sin la palabra clave JOIN la palabra clave JOIN.

Parece que no debería ser posible: unir tablas en SQL sin usar la palabra clave JOIN. Pero usar la palabra clave JOIN no es la única manera de unir tablas en SQL.

Este artículo le mostrará dos métodos adicionales para unir tablas. Ninguno de ellos requiere la palabra clave JOIN para funcionar. Estos son:

  1. Usar una coma entre los nombres de las tablas en la cláusula FROM y especificar la condición de unión en un WHERE
  2. Usando UNION/UNION ALL.

Asumo que sabes cómo funciona JOIN. Si lo necesitas, aquí tienes un repaso de cómo unir tablas usando JOINs.

El primer método: FROM y WHERE

Sintaxis

La sintaxis para este método de unir tablas sin usar JOINs es:

SELECT *
FROM , 
WHERE 

Puede reemplazar la palabra clave JOIN por una coma en la cláusula FROM. ¿Qué hace ahora? No hay ninguna palabra clave ON para que indique la condición de unión como lo haría al utilizar JOIN, por ejemplo, en qué dos columnas quiere unir las tablas. En este método, simplemente se utiliza una cláusula WHERE para hacerlo.

Este método hace exactamente lo mismo que:

SELECT *
FROM <table1> JOIN <table2>
ON <condition>

Veamos cómo funciona en la práctica.

Ejemplo

En este ejemplo, necesito encontrar el nombre del artista, los álbumes que ha grabado y los años en que fueron grabados, para cada artista.

Para mostrarte cómo funciona este método, utilizaré dos tablas. La primera es artist:

idartist_name
1Paul Simon
2Marvin Gaye
3Bettye LaVette
4Joni Mitchell
5Sly and the Family Stone

Es una tabla sencilla que contiene varios de mis músicos favoritos.

La otra tabla, albumtiene el siguiente aspecto:

idalbum_nameyear_recordedartist_id
1Dance to the Music19685
2Small Talk19745
3Stranger to Stranger20161
4I've Got My Own Hell to Raise20053
5Blues19714
6Court and Spark19744
7A Tribute to the Great Nat "King" Cole19652
8Graceland19861
9Still Crazy After All These Years19751
10In the Blue Light20181
11There's a Riot Goin' On19715
12The Scene of the Crime20073
13Mingus19794
14What's Going On19712
15Here, My Dear19782

Estos son los álbumes grabados por los músicos de la primera tabla.

Consulta

La consulta para unir estas tablas sin la palabra clave JOIN tiene el siguiente aspecto:

SELECT
    artist_name,
    album_name,
    year_recorded
FROM artist, album
WHERE artist.id = album.artist_id;

Primero, especifico las columnas que quiero ver en mi resultado: artist_name, album_name, y year_recorded. Provienen de artist o album. Uno estas dos tablas simplemente enumerándolas en la cláusula FROM y separándolas con una coma.

La cláusula WHERE se utiliza generalmente para filtrar resultados. Puedo utilizarla para filtrar este resultado de forma que muestre todos los datos en los que la columna id de la tabla artist sea igual a la columna artist_id de la tabla album. Puede ver que la condición en WHERE en esta consulta es la misma que estaría después de la palabra clave ON cuando se utiliza JOIN: artist.id = album.artist_id.

La consulta equivalente con la palabra clave JOIN es:

SELECT 	artist_name,
		album_name,
		year_recorded
FROM artist
JOIN album
ON artist.id = album.artist_id;

Resultado

Ambas consultas devuelven el mismo resultado:

artist_namealbum_nameyear_recorded
Paul SimonIn the Blue Light2018
Paul SimonStill Crazy After All These Years1975
Paul SimonGraceland1986
Paul SimonStranger to Stranger2016
Marvin GayeHere, My Dear1978
Marvin GayeWhat's Going On1971
Marvin GayeA Tribute to the Great Nat "King" Cole1965
Bettye LaVetteThe Scene of the Crime2007
Bettye LaVetteI've Got My Own Hell to Raise2005
Joni MitchellMingus1979
Joni MitchellCourt and Spark1974
Joni MitchellBlues1971
Sly and the Family StoneThere's a Riot Goin' On1971
Sly and the Family StoneSmall Talk1974
Sly and the Family StoneDance to the Music1968

El resultado combina los datos de las dos tablas iniciales. Ahora puedo ver, por ejemplo, que Paul Simon grabó el álbum "In the Blue Light" en 2018. Si no te fías de mi consulta, siempre puedes consultar la Wikipedia.

Este método utiliza una columna común para unir tablas. Recuerda que también puedes unir tablas que no tengan una columna común.

El segundo método: UNION/UNION ALL

Sintaxis

SELECT
    ,
    ,
    …
FROM 

UNION / UNION ALL

SELECT
    ,
    ,
    …
FROM 

Tanto UNION como UNION ALL se utilizan para unir el resultado de la primera consulta con el de la segunda. Basta con escribir dos sentencias SELECT y escribir UNION o UNION ALL entre ellas. Pero, ¿cuál es la diferencia entre estas dos palabras clave SQL? Recordemos que

  • UNION elimina las filas duplicadas de la consulta y las muestra sólo una vez.
  • UNION ALL muestra todas las filas de ambas tablas, sin importar el número de duplicados.

Para que tanto UNION como UNION ALL funcionen, todas las columnas de las dos sentencias SELECT deben coincidir. Esto significa que el número de columnas seleccionadas debe ser el mismo, y los tipos de datos de esas columnas deben ser los mismos.

Estos dos operadores se denominan operadores de conjunto. Lee este artículo para saber más sobre estos y otros operadores de conjunto.

Ejemplo

En este ejemplo también tenemos dos tablas. La primera se llama customer:

idfirst_namelast_name
1JimmyHellas
2FrancoisJambony
3RenataTraviata
4CarmenNaburana
5SteveInicks
6ElviraSamson
7AlpaCino
8RosaSparks
9BernardineSane
10BertRandrussell

Contiene una lista de mis clientes.

La segunda tabla es supplier:

idfirst_namelast_name
1ArpadPolanski
2BillyVan Persie
3SteveInicks
4Jean-ClaudeZaandam
5EminaArkayeva
6BoMilosz
7JanWrangler
8HeinrichStroopwafel
9HerringoStarr
10JosephineMatijevic
11AlpaCino
12FlintWestwood
13DesPaulmond
14WilmaJackson
15KatrinVerson
16BertRandrussell
17CarmenNaburana
18JimmyTulp
19LuisWolf
20MirandaFanucci

Si inspeccionas estas tablas un poco más de cerca, verás que algunas personas están en ambas tablas. Por ejemplo, fíjate en Steve Inicks: esto significa que Steve es, junto con otras personas, tanto mi cliente (compra algunos servicios a mi empresa) como mi proveedor (me presta algunos servicios).

Ahora, veamos qué aspecto tiene cuando uno estas tablas con UNION o UNION ALL.

Consulta: UNION

Este método de combinar tablas sin utilizar la palabra clave JOIN se traduce en la siguiente consulta:

SELECT 	
    first_name,
    last_name
FROM customer

UNION

SELECT	
    first_name,
    last_name
FROM supplier;

La primera sentencia SELECT selecciona las columnas first_name y last_name de la tabla customer. La segunda sentencia SELECT hace lo mismo pero desde la tabla supplier. Utilizo UNION para unir los resultados de estas dos consultas. Funciona: hay dos columnas en ambas sentencias SELECT, y son del mismo tipo de datos. Incluso tienen el mismo nombre, aunque no es necesario para que la consulta funcione.

Resultado: UNION

Al ejecutar la consulta se obtiene esto:

first_namelast_name
AlpaArpad
CinoBilly
JosephineMatijevic
LuisWolf
Jean-ClaudeZaandam
SteveInicks
BillyVan Persie
EminaArkayeva
MirandaFanucci
BoMilosz
JimmyHellas
FrancoisJambony
RosaSparks
KatrinVerson
JanWrangler
BernardineSane
HeinrichStroopwafel
ElviraSamson
RenataTraviata
JimmyTulp
WilmaJackson
ArpadPolanski
BertRandrussell
DesPaulmond
FlintWestwood
CarmenNaburana
HerringoStarr

Como he mencionado, es una combinación de todos los datos de ambas tablas.

Comprobemos si hay duplicados. He mencionado que Steve Inicks está en ambas customer y supplier tablas. En el resultado de la consulta, sólo se encuentra una vez. He marcado la fila donde está.

Veamos en qué se diferencia de UNION ALL.

Consulta: UNION ALL

La consulta en este caso es:

SELECT
    first_name,
    last_name
FROM customer

UNION ALL

SELECT
    first_name,
    last_name
FROM supplier;

Como puedes ver, esto no es muy diferente. De hecho, es la misma consulta, excepto que tiene UNION ALL en lugar de UNION.

Sin embargo, los resultados son diferentes. Echemos un vistazo.

Resultado: UNION ALL

El resultado de la consulta es:

first_namelast_name
JimmyHellas
FrancoisJambony
RenataTraviata
CarmenNaburana
SteveInicks
ElviraSamson
AlpaCino
RosaSparks
BernardineSane
BertRandrussell
ArpadPolanski
BillyVan Persie
SteveInicks
Jean-ClaudeZaandam
EminaArkayeva
BoMilosz
JanWrangler
HeinrichStroopwafel
HerringoStarr
JosephineMatijevic
AlpaCino
FlintWestwood
DesPaulmond
WilmaJackson
KatrinVerson
BertRandrussell
CarmenNaburana
JimmyTulp
LuisWolf
MirandaFanucci

Sabiendo que Steve Inicks aparece como cliente y como proveedor, comprobemos cuántas veces aparece en el resultado. Aparece dos veces, ambas marcadas en azul. También he marcado a otros tres que aparecen dos veces: Alpa Cino, Bert Randrussell y Carmen Naburana.

Aquí hay otro ejemplo de uso de UNION y UNION ALL..

Sí, las tablas se pueden unir sin la palabra clave JOIN

Como acaba de ver, no siempre es necesario usar la palabra clave JOIN para combinar dos tablas en SQL.

Puede reemplazarla con una coma en la cláusula FROM y luego indicar su condición de unión en la cláusula WHERE.

El otro método consiste en escribir dos sentencias SELECT. El resultado de cada una es una tabla, así que simplemente use UNION o UNION ALL para combinar las dos. Tenga en cuenta que esto sólo funciona si sus sentencias SELECT tienen el mismo número de columnas y los mismos tipos de datos.

Utilice UNION cuando no quiera mostrar duplicados y UNION ALL cuando quiera ver duplicados.

Aprenda todas las Formas Posibles de Unir Tablas en SQL

Mientras más formas conozca para unir tablas en SQL, mejor. Con estos dos métodos más el JOIN, unir tablas se vuelve más fácil. Los resultados de tus consultas se acercan más a lo que necesitas, y obtienes más de SQL.

Conocer una variedad de formas de unir tablas también te permite agitar un poco tu código. Puede ser aburrido escribir todo de la misma manera todo el tiempo. Pero lo más importante es que cada uno de los tres métodos es útil en diferentes situaciones.

Puedes aprender todos estos métodos de unión de tablas en nuestro curso SQL para principiantes . Esto es sólo un primer paso para dominar Curso completo de SQL. También necesitas mucha práctica para dominar la unión de tablas. Tal vez, la mejor manera es elegir al menos una opción en línea de nuestra lista de diez.