Другим вариантом будет подсчет A и B в группах:
with t (id, value) as (
select 1, 'A' from dual union
select 1, 'B' from dual union
select 2, 'A' from dual union
select 2, 'B' from dual union
select 2, 'C' from dual union
select 3, 'A' from dual union
select 3, 'C' from dual union
select 4, 'A' from dual union
select 4, 'F' from dual union
select 4, 'B' from dual
)
select id from t group by id
having sum(decode(value,'A',1,0)) > 0
and sum(decode(value,'B',1,0)) > 0;