Si bien la documentación no es del todo clara, establece que:
Si el comando INSERT contiene una cláusula RETURNING, el resultado será similar al de una declaración SELECT que contiene las columnas y los valores definidos en la lista RETURNING, calculados sobre las filas insertadas por el comando.
Ahora, "similar a" no es una garantía irrefutable, y lo planteé para su discusión en la lista de correo... pero en la práctica, PostgreSQL no alterará el orden de los valores en RETURNING
. Es poco probable que alguna vez podamos optimizar, incluso si queremos, porque demasiadas aplicaciones dependen de que se ordenen de la misma manera que la entrada.
Entonces... para INSERT INTO ... VALUES (...), (...), ... RETURNING ...
y para INSERT INTO ... SELECT ... ORDER BY ... RETURNING ...
debería ser seguro asumir que la relación de resultado está en el mismo orden que la entrada.