Luchnik> select ID from table1 t1 where t1.size < 10000 Luchnik> and not exists (select t2.ID from table2 t2 where t2.ID = t1.ID) Это первое, что стоит попробовать. Самое простое.
А вообще полезно знать корреляцию t1 и t2.
Если она низкая и есть индексы по id обеих таблиц, то:
select t.id
from
(select t1.ID from table1 t1
inner join table2 t2
on t2.ID = t1.ID) t inner join table1 tt on t.id = tt.id
where tt.size < 10000
Внутренний запрос здесь он сделает по merge join, т.к. оба входа у него отсортированы, на выходе будет немного записей, которые добьет по size. Это микрософак как я понимаю? На оракле я б внутри написал select t1.ROWID, а на MS SQL не помню, если индекс по id кластерный то смысла нет.