Ваш запрос почти верен;это будет работать:
SELECT *
FROM branch a, course b
WHERE a.courseid = b.courseid(+)
AND b.courseid IS NULL;
Этот запрос эквивалентен следующему запросу с синтаксисом соединения ANSI:
SELECT *
FROM branch a
LEFT JOIN course b ON a.courseid = b.courseid
WHERE b.courseid IS NULL;
Однако это сложный способ получить строки из branch
, которыене в course
(против присоединения).Следующий запрос должен генерировать тот же план и его легче читать:
SELECT *
FROM branch b
WHERE NOT EXISTS (SELECT NULL
FROM course c
WHERE c.courseid = b.courseid)
Если course.courseid
и branch.courseid
НЕ ОБНАРУЖЕНЫ, следующий запрос эквивалентен и даже проще для понимания:
SELECT *
FROM branch b
WHERE b.courseid NOT IN (SELECT c.courseid FROM course c)