Não se trata de unnest como tal, mas sobre o manuseio muito estranho do PostgreSQL de várias funções de retorno de conjunto no
SELECT Lista. Funções de retorno de set em SELECT não fazem parte do padrão ANSI SQL. Você achará o comportamento muito mais sensato com
LATERAL consultas, que devem ser preferidas em vez de usar uma função de retorno de conjunto em FROM tanto quanto possível:select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
por exemplo.
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)
A única vez que ainda uso várias funções de retorno de conjunto em
SELECT é quando eu quero emparelhar valores de funções que retornam o mesmo número de linhas. A necessidade disso desaparecerá na versão 9.4, com vários argumentos unnest e com suporte para WITH ORDINALITY .