Du skulle behöva tillhandahålla förklarande planer för att bättre kunna bedöma varför den ena presterar bättre än den andra. Men generellt sett kan du få bättre, eller åtminstone mer förutsägbara resultat för den här typen av sökning genom att ändra IN villkor till en EXISTS skick istället:
select *
from data_table t1
where exists (select null
from id_table t2
where t2.oid = t1.oid
and (other conditions))