Посмотрите на свой скрипт SQL: у вас есть пять записей в таблице, с пятью комбинациями NAME и ID. Таким образом, ваши запросы будут возвращать все строки. Фактически они такие же, как этот запрос ...
select name, id from test;
... только с дополнительным потреблением ресурсов для безрезультатным рода база данных обязуется обеспечить уникальность. Добавление новой записи, которая дублирует NAME и ID, но имеет другую EMAIL, поможет вам понять, что происходит.
Вы должны понимать, что использование DISTINCT на самом деле довольно редко в реальной жизни: для создания уникального набора результатов должно быть достаточно правильно определено предложение WHERE. GROUP BY обычно используется с агрегирующей функцией, такой как COUNT() или SUM(); например, сколько идентификаторов NAME + имеют более одной EMAIL?
select name, id from test
group by name, id having count(*) > 1;
Что касается заказа, ваши выполненные запросы требуют разного рода, так что порядок набора результатов может отличаться от порядка ввода. Oracle в любом случае не гарантирует порядок своих результирующих наборов, но сортировка делает его еще менее предсказуемым. Для того, чтобы получить эту гарантию необходимо указать ORDER BY пункте:
select distinct name, id from test
order by name, id
Это ORDER BY п гарантирует одинаковый порядок для любого заявления, независимо от того, что происходит другая обработка при фильтрации и обработки результирующего набора.