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
.