Dit gaat niet over unnest als zodanig, maar over PostgreSQL's zeer vreemde behandeling van meerdere set-returning functies in de SELECT lijst. Set-return functies in SELECT maken geen deel uit van de ANSI SQL-standaard.
U zult merken dat uw gedrag veel gezonder is met LATERAL query's, die de voorkeur verdienen boven het gebruik van een functie die een set retourneert in FROM zoveel mogelijk:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
bijv.
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)
De enige keer dat ik nog steeds meerdere set-returning-functies gebruik in SELECT is wanneer ik waarden wil koppelen aan functies die beide hetzelfde aantal rijen retourneren. De noodzaak daarvoor zal verdwijnen in 9.4, met multi-argument unnest en met ondersteuning voor WITH ORDINALITY .