Если вы хотите обратиться к «таблице» только один раз, вы можете использовать оконные функции:
select dd.a
from (select dd.*,
sum(case when a = 2 then 1 else 0 end) over () as cnt
from dd
) dd
where a = 2 or cnt = 0;
Это может быть полезно, когда «таблица» на самом деле является сложным выражением, и вы хотите убедиться, чточто он не оценивается несколько раз.