Это выглядит немного смешно, но Oracle 11g действительно разрешает запуск такого запроса
with
a as (select 1 from dual),
a as (select 2 from dual)
select *
from a;
Он возвращает результат первого подзапроса (т.е. 1).
Я просто не могу представить ситуацию, когда такая функция может быть полезна. В моем случае это скорее вызвало проблему, когда я забыл переименовать подзапрос после копирования/вставки его, а общий запрос возвращал неправильные/неожиданные результаты. К счастью, запрос был довольно простым, и причина была обнаружена сразу.
Во всяком случае, я бы ожидал, что Oracle сделает бросок и исключение в таком случае.
Итак, мой вопрос заключается в том, является ли такое поведение особенностью или ошибкой? Если функция, где она может быть полезна?
Спасибо.
BTW, SQLite не разрешает запуск аналогичного запроса и исключает исключение "дубликат WITh table name". Больше не пытались использовать другие двигатели.