Наличие not in
может ухудшить производительность. Вместо этого вы можете попробовать сгруппировать и посчитать количество нулей и двойок в каждой группе:
select
ColumnA,
sum(case ColumnB when 0 then 1 else 0 end) as Zeroes,
sum(case ColumnB when 2 then 1 else 0 end) as Twos
from TABLE
group by ColumnA
having Zeroes > 0 and Twos = 0
Я не уверен, что это более эффективно без проверки планов выполнения, но, поскольку это более просто, вполне может быть.
Кроме того, это синтаксис SQL Server, поэтому может потребоваться некоторая настройка для работы в Oracle.