¿Cuál es el comportamiento esperado para múltiples funciones de retorno de conjuntos en la cláusula select?

Estoy tratando de obtener una "unión cruzada" con el resultado de dos funciones de retorno de conjuntos, pero en algunos casos no obtengo la "unión cruzada", ver ejemplo

Comportamiento 1: Cuando las longitudes de conjunto son las mismas, coincide con elemento por elemento de cada conjunto

postgres=# SELECT generate_series(1,3), generate_series(5,7) order by 1,2;
 generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
(3 rows)

Comportamiento 2: Cuando las longitudes de los conjuntos son diferentes, se "cruzan" en los conjuntos

postgres=# SELECT generate_series(1,2), generate_series(5,7) order by 1,2;
 generate_series | generate_series 
-----------------+-----------------
               1 |               5
               1 |               6
               1 |               7
               2 |               5
               2 |               6
               2 |               7
(6 rows)

Creo que no estoy entendiendo algo aquí, ¿alguien puede explicar el comportamiento esperado?

EDITAR: otro ejemplo, más extraño que el anterior

postgres=# SELECT generate_series(1,2) x, generate_series(1,4) y order by x,y;
 x | y 
---+---
 1 | 1
 1 | 3
 2 | 2
 2 | 4
(4 rows)

(NOTA: aceptaré la respuesta que responde la pregunta del título con un enlace a la documentación).

Respuestas a la pregunta(3)

Su respuesta a la pregunta