Was ist das erwartete Verhalten für mehrere set-return-Funktionen in der select-Klausel?

Ich versuche, einen "Cross Join" mit dem Ergebnis von zwei Set-Return-Funktionen zu erhalten, aber in einigen Fällen erhalte ich keinen "Cross Join", siehe Beispiel

Verhalten 1: Wenn die eingestellten Längen gleich sind, werden die Elemente der einzelnen Sätze

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)

Verhalten 2: Wenn die eingestellten Längen unterschiedlich sind, werden die Sätze durch "Cross-Join" verbunden

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)

Ich glaube, ich verstehe hier etwas nicht, kann jemand das erwartete Verhalten erklären?

BEARBEITE: ein anderes Beispiel, seltsamer als das vorherige

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)

(HINWEIS: Ich akzeptiere die Antwort, die die Titelfrage mit dem Link zur Dokumentation beantwortet.)