Sie müssten die Erklärungspläne bereitstellen, um besser beurteilen zu können, warum einer besser abschneidet als der andere. Aber im Allgemeinen können Sie bessere oder zumindest vorhersagbarere Ergebnisse für diese Art von Abfrage erhalten, indem Sie den IN ändern Bedingung zu einem EXISTS Bedingung statt:
select *
from data_table t1
where exists (select null
from id_table t2
where t2.oid = t1.oid
and (other conditions))