Qual é o comportamento esperado para várias funções de retorno de conjunto na cláusula select?

Estou tentando obter uma "junção cruzada" com o resultado de duas funções de retorno de conjunto, mas em alguns casos não recebo a "junção cruzada", veja o exemplo

Comportamento 1: Quando o comprimento do conjunto é o mesmo, ele corresponde item a item 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)

Comportamento 2: Quando os comprimentos dos conjuntos são diferentes, os "conjuntos cruzados" são os 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)

Acho que não estou entendendo alguma coisa aqui. Alguém pode explicar o comportamento esperado?

EDITAR: outro exemplo, mais estranho que o 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: Aceito a resposta que responde à pergunta do título com o link para a documentação.)