postgresql full outer join の 順番について
full outer join実行時はonとして指定したcolumnでデータがソートされると考えてよいのでしょうか?仕様で保証されているものでしょうか?
以下のスクリプトを実施したときの結果についてしりたいです。
<スクリプト>
drop table if exists test1;
drop table if exists test2;
create temp table test1(num integer, val text);
create temp table test2(num integer, val text);
insert into test1 values(1,'a');
insert into test1 values(2,'b');
insert into test1 values(3,'c');
insert into test2 values(1,'aa');
insert into test2 values(5,'cc');
insert into test2 values(3,'bb');
SELECT * FROM test1 FULL JOIN test2 ON test1.num = test2.num;
<結果>
1 a 1 aa 2 b 3 c 3 bb 5 cc
上記のように、test2テーブルのnumがソートされた状態となります。
仕様の説明は以下のようになっています。
https://www.postgresql.jp/document/10/html/queries-table-expressions.html
FULL OUTER JOIN(完全外部結合)
まず、内部結合が行われます。 その後、T2のどの行の結合条件も満たさないT1の各行については、T2の列をNULL値として結合行が追加されます。 さらに、T1のどの行でも結合条件を満たさないT2の各行に対して、T1の列をNULL値として結合行が追加されます。
上記にはデータのオーダーに関する記載がありません。
この意味を考えたときには以下のようにテーブルが作られてもおかしくはないのではないでしょうか?
1 a 1 aa 2 b 5 cc 3 c 3 bb
また、試しに以下のようなスクリプトも実行してみました
<スクリプト>
drop table if exists test1;
drop table if exists test2;
create temp table test1(num integer, val text);
create temp table test2(num integer, val text);
insert into test1 values(1,'a');
insert into test1 values(2,'b');
insert into test1 values(6,'c');
insert into test1 values(3,'c');
insert into test2 values(1,'aa');
insert into test2 values(5,'cc');
insert into test2 values(3,'bb');
SELECT * FROM test1 FULL JOIN test2 ON test1.num = test2.num;
<結果>
1 a 1 aa 2 b 3 c 3 bb 5 cc 6 c
結果はやはりnum でソートされています。
full outer join実行時はonとして指定したcolumnでデータがソートされると考えてよいのでしょうか?仕様で保証されているものでしょうか?