Tema SQL
unnest() (PostgreSQL)
Expande un array (o varios en paralelo) a un conjunto de filas, una por elemento. Pieza clave del modelo ARRAY de PostgreSQL; MySQL no tiene unnest nativo; SQL Server usa OPENJSON u otras técnicas.
Descripción
unnest(array) devuelve una columna con los elementos en orden; con múltiples arrays del mismo cardinalidad alinea por posición (como zip). Los NULL en el array generan filas con NULL salvo que uses opciones de compatibilidad según versión. Combina con ANY/ALL o JOIN para relacionar con tablas. Para literales usa ARRAY[1,2,3] o cast a tipo array. En pipelines ETL, unnest tras split o regex convierte texto en filas sin procedimientos. No confundir con JSON: para jsonb usa jsonb_array_elements.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
unnest(array [, ...])
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Orden
- Preserva el orden de los elementos del array salvo ORDER BY exterior.
- Multiples arrays
- Deben tener la misma longitud para alineación por índice.
- Alternativas
- LATERAL unnest en FROM para correlacionar por fila.
Ejemplos
Ejemplo 1
SELECT unnest(ARRAY[10, 20, 30]) AS x;
SELECT t.id, u.valor
FROM pedidos t,
LATERAL unnest(t.ids_linea) AS u(valor);
Ejemplo 2
SELECT p.id, x.tag
FROM posts p,
LATERAL unnest(string_to_array(p.tags_csv, ',')) AS x(tag);
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.