CREATE TABLE table1 ( ID NUMBER, KEY NUMBER ) ;
INSERT INTO table1 ( ID, KEY ) VALUES ( 1, 0 ) ;
INSERT INTO table1 ( ID, KEY ) VALUES ( 2, 1 ) ;
INSERT INTO table1 ( ID, KEY ) VALUES ( 3, 0 ) ;
INSERT INTO table1 ( ID, KEY ) VALUES ( 4, 5 ) ;
INSERT INTO table1 ( ID, KEY ) VALUES ( 5, 4 ) ;
INSERT INTO table1 ( ID, KEY ) VALUES ( 6, 1 ) ;
CREATE TABLE table2 ( ID NUMBER ) ;
INSERT INTO table2 ( ID ) VALUES ( 3 ) ;
INSERT INTO table2 ( ID ) VALUES ( 4 ) ;
INSERT INTO table2 ( ID ) VALUES ( 5 ) ;
INSERT INTO table2 ( ID ) VALUES ( 6 ) ;
COMMIT ;
SELECT UNIQUE t1.key FROM table1 t1, table2 t2 WHERE t1.id = t2.id ;
План исполнения будет следующий
Plan Hash Value : 1501084449
----------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Time |
----------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | | |
| 1 | SORT UNIQUE | | | | | |
| 2 | MERGE JOIN | | | | | |
| 3 | SORT JOIN | | | | | |
| 4 | TABLE ACCESS FULL | TABLE2 | | | | |
| * 5 | SORT JOIN | | | | | |
| 6 | TABLE ACCESS FULL | TABLE1 | | | | |
----------------------------------------------------------------------
Predicate Information (identified by operation id):
------------------------------------------
* 5 - access("T1"."ID"="T2"."ID")
* 5 - filter("T1"."ID"="T2"."ID")
План читается с самого "правого" к самому "левому".
Т.е. сначала самая вложенная строка и вверх по дереву.
Собственно SORT UNIQUE выполняет предпоследним пунктом.
Отвечая на вопрос, сначала будет соединение и фильтрация ( строка 5 плана ) и только потом отбор уникальных строк/значений.
Правильный ответ такой ( не забываем про сортировку )
SQL> SELECT UNIQUE t1.key FROM table1 t1, table2 t2 WHERE t1.id = t2.id ;
KEY
----------
0
1
4
5
SQL>