Cómo usar alias en SQL para simplificar consultas SELECT con ejemplos

Imagen explicativa sobre alias en SQL, con ejemplo de código SELECT nombre AS cliente, (precio * cantidad) AS total FROM ventas; y resultado en tabla con encabezados claros “cliente” y “total”.

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:

idnombrefecha_altaactivo
1Ana2023-05-01TRUE

Resultado con alias:

cliente_idclientealtaesta_activo
1Ana2023-05-01TRUE

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:

preciocantidadprecio * cantidad
10.00330.00
19.90239.80

Salida con alias:

preciocantidadtotal_linea
10.00330.00
19.90239.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:

nombretotal
Ana120
Bruno80

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:

empleadojefe
AnaBruno
BrunoDiego
GinaFabio

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:

ciudadtotal_clientes
Madrid12
Barcelona8

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_idclientepedidosventasticket_promedio
5Elsa4900.00225.00
3Carla2720.00360.00

7) Orden en que SQL evalúa tu consulta (y cómo afecta a los alias)

Orden lógico simplificado:

  1. FROM / JOIN
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT

Consecuencias:

  • No podés usar un alias de SELECT en WHERE.
  • 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:

ciudadventas_ciudad
Madrid12500.00
Barcelona11050.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_idmesacumulado_clienteranking_mes
12023-05-01300.002
12023-06-01750.001
22023-05-01120.003

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:

idskupreciomoneda
2B-20019.99USD
4D-40075.00USD

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

Scroll al inicio