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

UNION vs. UNION ALL en SQL: ¿Cuál es la diferencia?

¿Diferencia?

UNION y UNION ALL se utilizan para recuperar registros de varias tablas. Este artículo detallará las diferencias entre ambas, permitiéndole hacer la mejor elección para cada escenario único.

Puede utilizar los comandos UNION y UNION ALL de SQL para obtener datos de varias tablas de su base de datos. Es un caso de uso común, teniendo en cuenta que la mayoría de las bases de datos tienen muchas tablas. Tanto UNION como UNION ALL se conocen como operadores de conjunto. En SQL, los operadores de conjunto combinan los resultados de dos o más consultas en un único resultado. Puedes leer más sobre los operadores de conjunto en este artículo.

Al comparar UNION frente a UNION ALL, hay una diferencia importante:

  • UNION sólo devuelve los registros únicos
  • UNION ALL devuelve todos los registros, incluidos los duplicados.

Si crees que te beneficiarías de un curso bien estructurado y completo que cubra los fundamentos de SQL, considera este curso SQL para principiantes de LearnSQL.

UNION vs. UNION ALL: Sintaxis

La sintaxis de ambas variantes de UNION es muy similar. Veámoslas individualmente, empezando por UNION.

Sintaxis de UNION

Recuerde que UNION combina el conjunto de resultados de dos o más sentencias SELECT, mostrando sólo valores distintos.

La sintaxis SQL que aparece a continuación muestra una UNION que se produce entre dos tablas diferentes; las columnas de ambas sentencias SELECT son del mismo tipo de datos o coinciden.

La cláusula WHERE mostrada es una inclusión opcional:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

Sintaxis SQL UNION ALL

Recuerde que UNION ALL combina los resultados de dos o más sentencias SELECT, mostrando todos los valores, incluidos los duplicados si existen.

La sintaxis SQL que se muestra a continuación muestra una UNION ALL que se produce entre dos tablas diferentes. Una vez más, las columnas en SELECT son de los mismos tipos de datos o coincidentes y la cláusula WHERE es opcional:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION ALL

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

Explicación de SQL UNION y UNION ALL

Hay varias reglas de uso para UNION y UNION ALL. El incumplimiento de estas reglas dará lugar a mensajes de error:

  • El número de columnas utilizadas en la primera consulta y en la segunda debe ser el mismo y los tipos de datos (por ejemplo, INT, VARCHAR, etc.) deben coincidir.
  • Los nombres de las columnas incluidas en ambas consultas pueden diferir; cuando este es el caso, el conjunto de datos resultante mostrará los nombres de las columnas de la primera consulta.
  • Cuando se utilizan alias SQL junto con UNION y UNION ALL, sólo es necesario incluir el alias con la primera consulta. Incluirlo con la segunda consulta no causará un error, pero tampoco tendrá impacto en la salida.

Puede utilizar UNION y UNION ALL para combinar tablas que no tienen ninguna columna en común. Este caso de uso está cubierto en este artículo sobre cómo unir tablas sin una columna en común.

SQL UNION vs UNION ALL: Ejemplo

Veamos un ejemplo práctico para comprender mejor UNION vs. UNION ALL. Imaginemos que tenemos una base de datos con información sobre varios clubes. Cada tabla mostrará los miembros de ese club y el lugar al que asisten. Cada club puede tener varias sedes o lugares diferentes donde se reúnen. La primera tabla es para el book_club. Contiene el nombre de los miembros del club y a qué location asisten:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street

Del mismo modo, la tabla rowing_club contiene el nombre de los miembros del club y a qué location asisten.

namelocation
MaryFair Street
SamanthaFair Street
PaulWest Street

Ahora que tenemos nuestras tablas, vamos a escribir nuestra consulta SQL. Usando la sintaxis UNION, obtenemos la siguiente consulta:

SELECT name, location 
FROM book_club

UNION

SELECT name, location 
FROM rowing_club

UNION primero realiza una operación de ordenación y elimina los registros que están duplicados en todas las columnas antes de devolver finalmente el conjunto de datos combinados. Puede ver que utilizamos columnas del mismo tipo de datos y SELECT el mismo número de columnas en cada consulta. Esto sigue las reglas de uso de UNION y debería ejecutarse sin ningún error.

La ejecución de esta consulta produce el siguiente resultado:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
SamanthaFair Street

¡Ahí lo tenemos! Todos los socios de ambos clubes.

Ahora vamos a modificar la consulta y cambiar UNION por UNION ALL:

SELECT name, location 
FROM book_club

UNION ALL

SELECT name, location 
FROM rowing_club

Con UNION ALL en su lugar, podemos esperar que los resultados incluyan duplicados. Ejecutamos esta nueva consulta y observamos el resultado:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
MaryFair Street
SamanthaFair Street
PaulWest Street

¿Puede detectar todos los registros duplicados? Compare este resultado con nuestras dos tablas originales. Puede ver que se han incluido todas las filas.

UNION o UNION ALL - ¿Cuál debe elegir?

Ahora que sabe cómo utilizar UNION y UNION ALL, probablemente se pregunte cuál es la mejor opción para su situación. Una cosa a tener en cuenta es el hecho de que UNION elimina los registros duplicados, lo que puede afectar al rendimiento de su consulta.

Si se pregunta qué variante debe utilizar, recuerde:

  • El uso de UNION realiza efectivamente un SELECT DISTINCT en el conjunto de resultados.
  • Si sabe que todos los registros devueltos por UNION van a ser únicos, utilice UNION ALL; será más rápido. Esto es especialmente relevante para conjuntos de datos más grandes.

Escribir consultas complejas con UNION y UNION ALL

Hemos cubierto las diferencias entre UNION y UNION ALL y por qué podría elegir una u otra. Con esta información, ahora puede recuperar datos de dos o más tablas de su base de datos. Tanto UNION como UNION ALL juegan un papel importante en el uso de consultas recursivas, un tema más avanzado que se trata con gran detalle en nuestro curso Consultas recursivas y expresiones de tabla comunes .

No olvides marcar esta página para tener fácil acceso a las explicaciones y ejemplos de UNION vs. UNION ALL. Además, considera guardar esta página de nuestro Libro de Cocina SQL, que explica cómo combinar los resultados de dos consultas en SQL. Este conocimiento puede llevar tus consultas SQL al siguiente nivel, ayudándote a manejar casos de uso complejos con facilidad.