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
SELECTsirve 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
SELECTenWHERE. - Sí podés usar alias en
ORDER BY. HAVINGsuele 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:
ASopcional. Para alias con espacios: comillas dobles o invertidas. - PostgreSQL:
ASopcional; alias con espacios con comillas dobles. - SQL Server:
ASopcional; alias con espacios con corchetes[ ]o comillas dobles. - Oracle:
ASopcional; 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.
