Si estás empezando con SQL, es normal que algunas consultas te parezcan largas o difíciles de leer. Los alias son un truco sencillo que te ayuda a que todo sea más claro: permiten poner nombres temporales a columnas y tablas dentro de una consulta. En esta guía aprenderás, paso a paso y desde cero, a usar alias en combinación con SELECT
para escribir consultas limpias, fáciles de entender y listas para informes.
1) Un repaso rápido: qué es SQL, una tabla y SELECT
- SQL (Structured Query Language) es el lenguaje que usamos para hablar con una base de datos relacional.
- Una tabla es como una hoja de cálculo: tiene columnas (campos, como
id
,nombre
,precio
) y filas (cada fila es un registro). - La instrucción
SELECT
sirve para leer datos.
Ejemplo mínimo:
SELECT nombre, precio
FROM productos;
Esto le pide a la base de datos: “mostrame las columnas nombre
y precio
de la tabla productos
”.
2) ¿Qué es un alias y por qué te conviene usarlo?
Un alias es un nombre alternativo y temporal que le das a una columna o a una tabla dentro de una consulta. No cambia nada en la base de datos; solo afecta a la consulta actual.
Ventajas:
- Legibilidad: el resultado muestra encabezados entendibles para cualquier persona.
- Brevedad: ahorrás teclear nombres largos de tablas o columnas.
- Mantenimiento: dentro de unos meses vas a entender tu propia consulta sin esfuerzo.
Formas básicas:
-- Alias de columna
SELECT columna AS alias
FROM tabla;
-- Alias de tabla
SELECT t.columna
FROM tabla AS t;
En la mayoría de motores AS
es opcional, pero usarlo mejora la claridad.
3) Alias de columna: renombrar valores para que el resultado sea claro
3.1 Cambiar los encabezados del resultado
Supongamos una tabla clientes(id, nombre, fecha_alta, activo)
:
SELECT
id AS cliente_id,
nombre AS cliente,
fecha_alta AS alta,
activo AS esta_activo
FROM clientes;
Resultado sin alias:
id | nombre | fecha_alta | activo |
---|---|---|---|
1 | Ana | 2023-05-01 | TRUE |
Resultado con alias:
cliente_id | cliente | alta | esta_activo |
---|---|---|---|
1 | Ana | 2023-05-01 | TRUE |
3.2 Nombrar cálculos con alias
Imaginá una tabla ventas(precio, cantidad)
:
SELECT
precio,
cantidad,
precio * cantidad AS total_linea
FROM ventas;
Salida sin alias:
precio | cantidad | precio * cantidad |
---|---|---|
10.00 | 3 | 30.00 |
19.90 | 2 | 39.80 |
Salida con alias:
precio | cantidad | total_linea |
---|---|---|
10.00 | 3 | 30.00 |
19.90 | 2 | 39.80 |
👉 Con un vistazo queda claro qué significa la última columna.
3.3 “Poner lindo” un texto y nombrarlo
-- PostgreSQL (operador || concatena texto)
SELECT
nombre || ' ' || apellido AS nombre_completo
FROM usuarios;
Resultado:
nombre_completo |
---|
Ana Lopez |
Bruno Gómez |
3.4 ¿Se pueden usar espacios en un alias?
Sí, pero necesitás comillas (o corchetes en SQL Server):
-- Estándar / PostgreSQL / Oracle
SELECT nombre AS "Nombre completo" FROM usuarios;
-- SQL Server
SELECT nombre AS [Nombre completo] FROM usuarios;
4) Alias de tabla: imprescindibles cuando hay JOIN
Cuando unís tablas, escribir clientes.nombre
y pedidos.total
todo el tiempo cansa. Los alias de tabla lo resuelven:
SELECT c.nombre, p.total
FROM clientes AS c
JOIN pedidos AS p ON p.cliente_id = c.id;
Resultado simplificado:
nombre | total |
---|---|
Ana | 120 |
Bruno | 80 |
Auto-join (la misma tabla dos veces)
SELECT
e1.nombre AS empleado,
e2.nombre AS jefe
FROM empleados e1
JOIN empleados e2 ON e1.jefe_id = e2.id;
Resultado:
empleado | jefe |
---|---|
Ana | Bruno |
Bruno | Diego |
Gina | Fabio |
5) Subconsultas (tablas entre paréntesis) y por qué siempre llevan alias
Una subconsulta es una consulta dentro de otra. Si la ponés en la sección FROM
, se comporta como una “tabla temporal” y debe tener alias.
SELECT t.ciudad, t.total_clientes
FROM (
SELECT ciudad, COUNT(*) AS total_clientes
FROM clientes
GROUP BY ciudad
) AS t
ORDER BY t.total_clientes DESC;
Resultado:
ciudad | total_clientes |
---|---|
Madrid | 12 |
Barcelona | 8 |
6) Ejemplo paso a paso: un informe con alias claro, de principio a fin
Objetivo: un ranking de clientes por ventas en los últimos 30 días.
Paso 1: pedidos recientes
SELECT
id,
cliente_id,
total,
fecha
FROM pedidos
WHERE fecha >= CURRENT_DATE - INTERVAL '30 days';
Paso 2: métricas por cliente
SELECT
cliente_id,
COUNT(id) AS pedidos,
SUM(total) AS ventas,
ROUND(AVG(total), 2) AS ticket_promedio
FROM pedidos
WHERE fecha >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY cliente_id;
Paso 3: unir con clientes
SELECT
c.id AS cliente_id,
c.nombre AS cliente,
agg.pedidos,
agg.ventas,
agg.ticket_promedio
FROM clientes c
JOIN (
SELECT
cliente_id,
COUNT(id) AS pedidos,
SUM(total) AS ventas,
ROUND(AVG(total), 2) AS ticket_promedio
FROM pedidos
WHERE fecha >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY cliente_id
) AS agg ON agg.cliente_id = c.id
ORDER BY agg.ventas DESC
LIMIT 20;
Resultado simplificado:
cliente_id | cliente | pedidos | ventas | ticket_promedio |
---|---|---|---|---|
5 | Elsa | 4 | 900.00 | 225.00 |
3 | Carla | 2 | 720.00 | 360.00 |
7) Orden en que SQL evalúa tu consulta (y cómo afecta a los alias)
Orden lógico simplificado:
Consecuencias:
- No podés usar un alias de
SELECT
enWHERE
. - Sí podés usar alias en
ORDER BY
. HAVING
suele aceptar alias.
Ejemplo de error:
-- ❌ Esto falla
SELECT precio * cantidad AS total
FROM ventas
WHERE total > 100;
Corrección con subconsulta:
SELECT *
FROM (
SELECT precio * cantidad AS total
FROM ventas
) t
WHERE total > 100;
8) GROUP BY, HAVING y alias
Ejemplo: total de ventas por ciudad, mostrando solo las que superan 10.000.
SELECT
ciudad,
SUM(total) AS ventas_ciudad
FROM pedidos
GROUP BY ciudad
HAVING SUM(total) > 10000
ORDER BY ventas_ciudad DESC;
Resultado:
ciudad | ventas_ciudad |
---|---|
Madrid | 12500.00 |
Barcelona | 11050.50 |
9) Alias y funciones de ventana
Las funciones de ventana permiten acumular o rankear sin agrupar toda la tabla.
SELECT
c.cliente_id,
c.mes,
SUM(c.total) OVER (PARTITION BY c.cliente_id ORDER BY c.mes) AS acumulado_cliente,
RANK() OVER (PARTITION BY c.mes ORDER BY c.total DESC) AS ranking_mes
FROM consumos c;
Resultado simplificado:
cliente_id | mes | acumulado_cliente | ranking_mes |
---|---|---|---|
1 | 2023-05-01 | 300.00 | 2 |
1 | 2023-06-01 | 750.00 | 1 |
2 | 2023-05-01 | 120.00 | 3 |
10) JSON y alias: exponer claves simples
SELECT
o.id,
o.detalle->>'sku' AS sku,
(o.detalle->>'precio')::numeric AS precio,
o.detalle->>'moneda' AS moneda
FROM ordenes o
WHERE o.detalle->>'moneda' = 'USD';
Resultado:
id | sku | precio | moneda |
---|---|---|---|
2 | B-200 | 19.99 | USD |
4 | D-400 | 75.00 | USD |
11) Diferencias entre motores SQL
- MySQL/MariaDB:
AS
opcional. Para alias con espacios: comillas dobles o invertidas. - PostgreSQL:
AS
opcional; alias con espacios con comillas dobles. - SQL Server:
AS
opcional; alias con espacios con corchetes[ ]
o comillas dobles. - Oracle:
AS
opcional; alias con espacios con comillas dobles.
👉 Consejo: usá siempre AS
y comillas dobles para máxima compatibilidad.
12) Errores frecuentes y cómo evitarlos
- Usar alias en
WHERE
(no existe todavía). - Alias duplicados en el resultado.
- Alias con palabras reservadas (
user
,order
,group
). - Olvidar comillas en alias con espacios.
- Repetir expresiones largas en vez de usar subconsulta o CTE.
13) Tres consultas completas y útiles
13.1 Informe de clientes principales (últimos 30 días)
SELECT
c.id AS cliente_id,
c.nombre AS cliente,
COUNT(p.id) AS pedidos,
SUM(p.total) AS ventas,
ROUND(AVG(p.total), 2) AS ticket_promedio
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
WHERE p.fecha >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY c.id, c.nombre
ORDER BY ventas DESC
LIMIT 20;
13.2 Resumen mensual con ranking
WITH resumen AS (
SELECT
c.id,
c.nombre,
DATE_TRUNC('month', p.fecha) AS mes,
SUM(p.total) AS ventas_mes
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.id, c.nombre, DATE_TRUNC('month', p.fecha)
)
SELECT
id,
nombre AS cliente,
mes,
ventas_mes,
RANK() OVER (PARTITION BY mes ORDER BY ventas_mes DESC) AS ranking_mes
FROM resumen
ORDER BY mes DESC, ranking_mes ASC;
13.3 Campos JSON expuestos con alias
SELECT
o.id,
o.detalle->>'sku' AS sku,
(o.detalle->>'precio')::numeric AS precio,
o.detalle->>'moneda' AS moneda
FROM ordenes o
WHERE o.detalle->>'moneda' = 'EUR'
ORDER BY precio DESC;
Conclusión
Un alias es un nombre temporal que le das a una columna o tabla en una consulta.
En SELECT
, los alias vuelven legibles los encabezados y breve la escritura, sobre todo con JOIN
, cálculos y subconsultas.
Recordá el orden de evaluación: por eso el alias no existe en WHERE
, pero sí en ORDER BY
y normalmente en HAVING
.
Si repetís una expresión o querés “filtrar por un alias”, usá subconsulta o CTE y poné un alias claro.
Elegí alias descriptivos y únicos: eso convierte tus consultas en reportes claros que cualquiera entiende.
Con estas ideas y ejemplos ya podés empezar a usar alias en tus consultas SELECT
y notar, desde hoy, que tu SQL es más claro, corto y profesional.
📚 Artículos relacionados
- Buenas prácticas para nombrar columnas y tablas con alias en SQL
Recomendaciones claras y ejemplos detallados para elegir alias descriptivos, consistentes y fáciles de entender en tus consultas SQL. - Cómo aplicar alias en subconsultas SQL para mejorar la legibilidad
Explicación detallada y práctica de cómo usar alias en subconsultas para que las consultas sean más claras, organizadas y fáciles de mantener. - Uso de alias en SQL con funciones de agregación como COUNT y SUM
Ejemplos prácticos y explicaciones para aplicar alias en funciones de agregación y generar reportes legibles y profesionales. - Errores comunes al trabajar con alias en SQL y cómo evitarlos
Lista de errores frecuentes al usar alias en SQL con soluciones claras para evitarlos y escribir consultas sin fallos.