Un alias es un seudónimo corto para una tabla o una columna en una consulta. SQL te deja renombrar cualquier cosa sobre la marcha en la salida y darle a una tabla un identificador corto para que sea más fácil de referenciar.
Dos variantes:
- Alias de columna — renombra la columna del resultado.
SELECT salary AS pay → el encabezado de la columna de salida es «pay».
- Alias de tabla — un nombre corto para una tabla dentro de esta consulta.
FROM employees e → en lugar de employees.name escribes e.name.
Palabra clave: AS. Opcional.
Por qué importan los alias
- Legibilidad.
e.name es más corto que employees.name. En una consulta de cinco tablas eso es enorme.
- Obligatorios cuando hay ambigüedad. Si dos tablas comparten un nombre de columna (digamos
id), la base de datos no puede saber a cuál te refieres sin un prefijo.
- Salida limpia. Si el resultado es
LOWER(CONCAT(first_name, ' ', last_name)), la columna recibe un nombre feo autogenerado. AS full_name lo arregla.
- Autouniones. Cuando una tabla se une consigo misma (p. ej. una jerarquía empleado-jefe), los alias son la única forma.
Alias de columna
SELECT
first_name AS given_name,
last_name AS surname,
salary * 12 AS annual_salary
FROM employees;
Qué pasa:
first_name → columna de salida «given_name».
last_name → «surname».
- El calculado
salary * 12 → «annual_salary». Sin un alias sería ?column? (PostgreSQL) o salary * 12 (MySQL) — feo.
AS es opcional: salary * 12 annual_salary funciona igual. Por legibilidad, mantén AS.
Ejemplo real con employees:
| id | first_name | last_name | salary |
|---|
| 1 | Anna | Ivanova | 4000 |
| 2 | Boris | Petrov | 2700 |
| 3 | Vera | Sidorova | 5000 |
Consulta:
SELECT
first_name AS given_name,
salary * 12 AS annual_salary
FROM employees;
Resultado:
| given_name | annual_salary |
|---|
| Anna | 48000 |
| Boris | 32400 |
| Vera | 60000 |
Alias de tabla
SELECT e.first_name, d.name
FROM employees e
JOIN departments d ON e.department_id = d.id;
Cada tabla obtuvo un nombre de una letra. Más corto que employees.first_name y departments.name.
Buena práctica: las primeras letras del nombre de la tabla. users u, orders o, products p. Si dos tablas empiezan por la misma letra — users u, user_logs ul. Haz que el alias sea mnemotécnico, no t1, t2.
AS para los alias de tabla también es opcional y la mayoría de los estilos lo omiten:
FROM employees AS e
FROM employees e
Cuándo son obligatorios los alias
En un JOIN donde ambas tablas comparten un nombre de columna, tienes que prefijar las referencias — y un alias corto es la forma práctica.
Ejemplo: un usuario tiene id, un pedido tiene id.
SELECT id FROM users JOIN orders ON users.id = orders.user_id;
SELECT u.id, o.id
FROM users u
JOIN orders o ON u.id = o.user_id;
Autounión — alias o nada
Cuando una tabla se une consigo misma, la base de datos no puede distinguir las copias sin alias. Ejemplo: empleados con un manager_id que referencia a otro empleado de la misma tabla.
employees:
| id | name | manager_id |
|---|
| 1 | Anna | NULL |
| 2 | Boris | 1 |
| 3 | Vera | 1 |
| 4 | Grisha | 2 |
| 5 | Denis | 2 |
Objetivo: emparejar a cada empleado con su jefe.
SELECT
emp.name AS employee,
mgr.name AS manager
FROM employees emp
LEFT JOIN employees mgr ON emp.manager_id = mgr.id;
Resultado:
| employee | manager |
|---|
| Anna | NULL |
| Boris | Anna |
| Vera | Anna |
| Grisha | Boris |
| Denis | Boris |
La tabla es una, pero aparece dos veces en la consulta — como emp y como mgr. Sin alias, la base de datos no puede saber a qué name te refieres.
Subconsultas en FROM — alias obligatorio
Una subconsulta en FROM debe tener un alias:
SELECT t.country, t.cnt
FROM (
SELECT country, COUNT(*) AS cnt
FROM users
GROUP BY country
) t
WHERE t.cnt > 10;
Una subconsulta es una «tabla temporal». Sin un nombre no puedes referenciarla. Tanto PostgreSQL como MySQL dan error: «every derived table must have its own alias».
Alias y orden de ejecución
Gazapo importante: un alias de columna no se puede usar en WHERE.
SELECT salary * 12 AS annual
FROM employees
WHERE annual > 1000000;
Por qué: SQL evalúa WHERE antes de SELECT. En el momento en que se ejecuta WHERE, annual aún no existe. Soluciones alternativas:
WHERE salary * 12 > 1000000
SELECT * FROM (
SELECT salary * 12 AS annual FROM employees
) t WHERE t.annual > 1000000;
En ORDER BY los alias sí funcionan — ORDER BY se ejecuta después de SELECT:
SELECT salary * 12 AS annual
FROM employees
ORDER BY annual DESC;
Ejemplo más grande: una red social
users:
posts:
| id | author_id | title | likes |
|---|
| 10 | 1 | My first post | 12 |
| 11 | 1 | Cute cats | 87 |
| 12 | 2 | Borscht recipe | 45 |
comments:
| id | post_id | author_id | text |
|---|
| 20 | 10 | 2 | Awesome! |
| 21 | 11 | 1 | Thanks for the likes! |
| 22 | 11 | 2 | Cool :) |
Objetivo: mostrar «autor de la publicación — título de la publicación — autor del comentario — texto del comentario».
SELECT
pa.name AS post_author,
p.title AS post_title,
ca.name AS comment_author,
c.text AS comment_text
FROM posts p
JOIN users pa ON pa.id = p.author_id
JOIN comments c ON c.post_id = p.id
JOIN users ca ON ca.id = c.author_id
ORDER BY p.id, c.id;
Resultado:
| post_author | post_title | comment_author | comment_text |
|---|
| Anna | My first post | Boris | Awesome! |
| Anna | Cute cats | Anna | Thanks for the likes! |
| Anna | Cute cats | Boris | Cool :) |
Alias obligatorios aquí:
users aparece dos veces (como autor de la publicación y como autor del comentario) → hacen falta alias distintos pa y ca.
- La columna
name existe tanto en pa como en ca → ambigua sin un prefijo.
- Los alias de columna (
AS post_author, AS comment_author) hacen la salida legible.
Esta consulta simplemente no se puede escribir sin alias.
Errores habituales de principiante
1. Usar un alias de columna en WHERE. No funciona (mira el orden de ejecución). ORDER BY — sí, WHERE — no.
2. Olvidar el alias en una subconsulta en FROM. Error «every derived table must have its own alias».
3. Alias de una letra por todas partes. Con cinco tablas a, b, c, d, e, una semana después no recuerdas cuál es cuál. Usa nombres cortos mnemotécnicos: users u, orders o, payments p.
4. Alias entrecomillados o con espacios. ¿Quieres espacios o una palabra clave en tu alias? PostgreSQL necesita comillas dobles: AS "My Column". Simplemente no lo hagas — usa snake_case.
5. Definir un alias de tabla y aun así escribir el nombre completo. Inútil: FROM employees e ... WHERE employees.id = 1 — el alias está definido pero no se usa. Obtendrás «invalid reference to FROM-clause entry for table 'employees'».
6. El alias choca con una palabra reservada. AS user, AS order pueden causar problemas en algunas bases de datos. Evítalo o entrecomíllalo.
Resumen rápido
- Un alias es un seudónimo para una tabla o columna, opcionalmente introducido con
AS.
AS es opcional en ambos contextos.
- Los alias de columna son visibles en
SELECT, ORDER BY, GROUP BY, no en WHERE ni HAVING (orden de ejecución).
- Los alias de tabla son obligatorios cuando se hace JOIN de tablas con nombres de columna compartidos.
- Las autouniones son imposibles sin alias.
- Una subconsulta en FROM debe tener un alias.
Pruébalo tú
Sobre las tablas de ejemplo:
- Lista las publicaciones con el autor y el número de comentarios. Usa alias para abreviar.
- Autounión sobre
employees: empareja a cada jefe con los empleados que le reportan.
- Subconsulta en FROM: calcula la valoración media de las publicaciones que tienen más de 50 me gusta. La consulta interior filtra, la exterior promedia.
Los alias son una técnica que mejora notablemente la legibilidad. Conviértelo en un hábito: dales nombres cortos a las tablas en los JOIN.
Un alias es un seudónimo corto para una tabla o una columna en una consulta. SQL te deja renombrar cualquier cosa sobre la marcha en la salida y darle a una tabla un identificador corto para que sea más fácil de referenciar.
Dos variantes:
SELECT salary AS pay→ el encabezado de la columna de salida es «pay».FROM employees e→ en lugar deemployees.nameescribese.name.Palabra clave:
AS. Opcional.Por qué importan los alias
e.namees más corto queemployees.name. En una consulta de cinco tablas eso es enorme.id), la base de datos no puede saber a cuál te refieres sin un prefijo.LOWER(CONCAT(first_name, ' ', last_name)), la columna recibe un nombre feo autogenerado.AS full_namelo arregla.Alias de columna
SELECT first_name AS given_name, last_name AS surname, salary * 12 AS annual_salary FROM employees;Qué pasa:
first_name→ columna de salida «given_name».last_name→ «surname».salary * 12→ «annual_salary». Sin un alias sería?column?(PostgreSQL) osalary * 12(MySQL) — feo.ASes opcional:salary * 12 annual_salaryfunciona igual. Por legibilidad, manténAS.Ejemplo real con
employees:Consulta:
SELECT first_name AS given_name, salary * 12 AS annual_salary FROM employees;Resultado:
Alias de tabla
SELECT e.first_name, d.name FROM employees e JOIN departments d ON e.department_id = d.id;Cada tabla obtuvo un nombre de una letra. Más corto que
employees.first_nameydepartments.name.Buena práctica: las primeras letras del nombre de la tabla.
users u,orders o,products p. Si dos tablas empiezan por la misma letra —users u,user_logs ul. Haz que el alias sea mnemotécnico, not1,t2.ASpara los alias de tabla también es opcional y la mayoría de los estilos lo omiten:-- equivalente FROM employees AS e FROM employees eCuándo son obligatorios los alias
En un JOIN donde ambas tablas comparten un nombre de columna, tienes que prefijar las referencias — y un alias corto es la forma práctica.
Ejemplo: un usuario tiene
id, un pedido tieneid.-- No funciona — id es ambiguo SELECT id FROM users JOIN orders ON users.id = orders.user_id; -- Funciona SELECT u.id, o.id FROM users u JOIN orders o ON u.id = o.user_id;Autounión — alias o nada
Cuando una tabla se une consigo misma, la base de datos no puede distinguir las copias sin alias. Ejemplo: empleados con un
manager_idque referencia a otro empleado de la misma tabla.employees:Objetivo: emparejar a cada empleado con su jefe.
SELECT emp.name AS employee, mgr.name AS manager FROM employees emp LEFT JOIN employees mgr ON emp.manager_id = mgr.id;Resultado:
La tabla es una, pero aparece dos veces en la consulta — como
empy comomgr. Sin alias, la base de datos no puede saber a quénamete refieres.Subconsultas en FROM — alias obligatorio
Una subconsulta en
FROMdebe tener un alias:SELECT t.country, t.cnt FROM ( SELECT country, COUNT(*) AS cnt FROM users GROUP BY country ) t WHERE t.cnt > 10;Una subconsulta es una «tabla temporal». Sin un nombre no puedes referenciarla. Tanto PostgreSQL como MySQL dan error: «every derived table must have its own alias».
Alias y orden de ejecución
Gazapo importante: un alias de columna no se puede usar en WHERE.
-- NO FUNCIONA SELECT salary * 12 AS annual FROM employees WHERE annual > 1000000;Por qué: SQL evalúa
WHEREantes deSELECT. En el momento en que se ejecutaWHERE,annualaún no existe. Soluciones alternativas:-- Opción 1: repite la expresión WHERE salary * 12 > 1000000 -- Opción 2: subconsulta o CTE SELECT * FROM ( SELECT salary * 12 AS annual FROM employees ) t WHERE t.annual > 1000000;En
ORDER BYlos alias sí funcionan —ORDER BYse ejecuta después deSELECT:SELECT salary * 12 AS annual FROM employees ORDER BY annual DESC; -- OKEjemplo más grande: una red social
users:posts:comments:Objetivo: mostrar «autor de la publicación — título de la publicación — autor del comentario — texto del comentario».
SELECT pa.name AS post_author, p.title AS post_title, ca.name AS comment_author, c.text AS comment_text FROM posts p JOIN users pa ON pa.id = p.author_id JOIN comments c ON c.post_id = p.id JOIN users ca ON ca.id = c.author_id ORDER BY p.id, c.id;Resultado:
Alias obligatorios aquí:
usersaparece dos veces (como autor de la publicación y como autor del comentario) → hacen falta alias distintospayca.nameexiste tanto enpacomo enca→ ambigua sin un prefijo.AS post_author,AS comment_author) hacen la salida legible.Esta consulta simplemente no se puede escribir sin alias.
Errores habituales de principiante
1. Usar un alias de columna en WHERE. No funciona (mira el orden de ejecución).
ORDER BY— sí,WHERE— no.2. Olvidar el alias en una subconsulta en FROM. Error «every derived table must have its own alias».
3. Alias de una letra por todas partes. Con cinco tablas
a, b, c, d, e, una semana después no recuerdas cuál es cuál. Usa nombres cortos mnemotécnicos:users u,orders o,payments p.4. Alias entrecomillados o con espacios. ¿Quieres espacios o una palabra clave en tu alias? PostgreSQL necesita comillas dobles:
AS "My Column". Simplemente no lo hagas — usa snake_case.5. Definir un alias de tabla y aun así escribir el nombre completo. Inútil:
FROM employees e ... WHERE employees.id = 1— el alias está definido pero no se usa. Obtendrás «invalid reference to FROM-clause entry for table 'employees'».6. El alias choca con una palabra reservada.
AS user,AS orderpueden causar problemas en algunas bases de datos. Evítalo o entrecomíllalo.Resumen rápido
AS.ASes opcional en ambos contextos.SELECT,ORDER BY,GROUP BY, no en WHERE ni HAVING (orden de ejecución).Pruébalo tú
Sobre las tablas de ejemplo:
employees: empareja a cada jefe con los empleados que le reportan.Los alias son una técnica que mejora notablemente la legibilidad. Conviértelo en un hábito: dales nombres cortos a las tablas en los JOIN.