No se trata de unnest como tal, sino del manejo muy extraño de PostgreSQL de múltiples funciones de devolución de conjuntos en SELECT
lista. Funciones de devolución de conjuntos en SELECT
no forman parte del estándar ANSI SQL.
Encontrarás un comportamiento mucho más sano con LATERAL
consultas, que deberían ser preferibles al uso de una función de devolución de conjuntos en FROM
tanto como sea posible:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
por ejemplo
regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
a | b
---+---
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
(6 rows)
La única vez que sigo usando múltiples funciones de devolución de conjuntos en SELECT
es cuando quiero emparejar valores de funciones que devuelven el mismo número de filas. La necesidad de eso desaparecerá en 9.4, con argumentos múltiples unnest
y con soporte para WITH ORDINALITY
.