Нет такой вещи как exception join
в Oracle. Что касается, только DB2 поддерживает этот синтаксис.
Если вам нужны все меню без ресторана, я бы предложил not exists
:
select m.*
from menu m
where not exists (select 1 from restaurant r where r.restaurant_id = m.restaurant_id)
order by m.restaurant_id
Вы также можете express это с anti- left join
:
select m.*
from menu m
left join restaurant r on r.restaurant_id = m.restaurant_id
where r.restaurant_id is null
order by m.restaurant_id
С другой стороны, если вы хотите, чтобы все рестораны без меню, вы можете просто инвертировать таблицы в запросе:
select r.*
from restaurant r
where not exists (select 1 from menu m where r.restaurant_id = m.restaurant_id)
order by r.restaurant_id