Contenido de esta guía
Qué representa el alias
Una subconsulta escrita dentro de FROM produce un resultado tabular temporal. El alias le da un nombre para que la consulta exterior pueda referirse a sus columnas.
Este patrón se denomina también tabla derivada. El alias no crea una tabla física ni conserva datos después de terminar la sentencia.
Forma general
SELECT resumen.columna
FROM (
SELECT expresion AS columna
FROM tabla
) AS resumen;El estándar SQL exige un alias para una subconsulta situada en FROM, pero la obligatoriedad práctica cambia entre motores. PostgreSQL actual permite omitir tanto AS como el alias de esa subconsulta, mientras que otros motores exigen un nombre para la tabla derivada. Incluso donde es opcional, un alias explícito hace visible dónde termina el resultado interior y permite calificar sus columnas con claridad.
Ejemplo guiado
SELECT c.nombre AS cliente,
r.total_pedidos,
ROUND(r.importe_total, 2) AS importe_total
FROM clientes AS c
INNER JOIN (
SELECT cliente_id,
COUNT(*) AS total_pedidos,
SUM(total) AS importe_total
FROM pedidos
WHERE estado <> 'cancelado'
GROUP BY cliente_id
) AS r
ON r.cliente_id = c.id
WHERE r.total_pedidos >= 2
ORDER BY importe_total DESC;| cliente | total_pedidos | importe_total |
|---|---|---|
| Sara Gómez | 2 | 1112.0 |
| Ana Torres | 2 | 377.4 |
| Hugo Castro | 2 | 268.0 |
La subconsulta r resume los pedidos por cliente. La consulta exterior ya no necesita recalcular el conteo y la suma: usa r.total_pedidos y r.importe_total como columnas de una tabla.
Errores frecuentes
Exponer dos columnas con el mismo nombre
Si la tabla exterior y la subconsulta tienen una columna llamada id, escribir solo id puede resultar ambiguo. Califica la referencia: c.id o r.cliente_id.
Evita también SELECT * dentro de la subconsulta. Seleccionar solo las columnas necesarias documenta la interfaz del resultado derivado y reduce sorpresas cuando cambie la tabla base.
Comprueba lo aprendido
Filtra productos por ventas resumidas
Crea una subconsulta llamada ventas que calcule las unidades vendidas por producto. Únela con productos y muestra solo los productos con tres o más unidades.
detalle_pedido por producto_id.unidades.ventas.producto_id con productos.id.Solución razonada
SELECT p.nombre AS producto,
ventas.unidades
FROM productos AS p
INNER JOIN (
SELECT producto_id,
SUM(cantidad) AS unidades
FROM detalle_pedido
GROUP BY producto_id
) AS ventas
ON ventas.producto_id = p.id
WHERE ventas.unidades >= 3
ORDER BY ventas.unidades DESC, p.nombre;ventas describe qué contiene el resultado intermedio. La consulta exterior puede filtrar y ordenar por su columna unidades.
Compatibilidad entre motores
Las tablas derivadas están disponibles en PostgreSQL, MySQL, SQLite y SQL Server, pero no comparten exactamente las reglas de alias. El estándar SQL pide un alias; PostgreSQL actual permite omitirlo y documenta que escribirlo sigue siendo una buena práctica para código portable. Otros dialectos pueden exigirlo. Para AprenderSQL.es usamos siempre un nombre explícito porque documenta el resultado intermedio y permite escribir referencias como ventas.unidades sin ambigüedad. En consultas correlacionadas, distingue este patrón de los alias que permiten a una subconsulta referirse a filas de la consulta exterior.
Qué debes recordar
- Una subconsulta de
FROMse comporta como una tabla temporal de la sentencia. - El alias nombra esa tabla derivada.
- Califica sus columnas para evitar ambigüedades.
- Selecciona únicamente las columnas que necesita la consulta exterior.