Вы ничего не упомянули об индексах ... name
в обеих таблицах должно быть как минимум проиндексировано.
Вот эквивалент с использованием JOIN:
SELECT DISTINCT
x.id,
x.name
FROM main_table x
JOIN ANOTHER_TABLE y ON y.name = x.name
AND y.attribute IN ('foo', 'bar', 'baz')
Но учтите, что если в ANOTHER_TABLE
имеется более одной записи, которая связана с записью MAIN_TABLE
- JOIN будет создавать дубликаты. Отсюда необходимость в DISTINCT (или GROUP BY, если это ваше предпочтение).
EXISTS, вероятно, будет лучшим выбором, чем IN:
SELECT x.id,
x.name
FROM main_table x
WHERE EXISTS(SELECT NULL
FROM ANOTHER_TABLE y
WHERE y.name = x.name
AND y.attribute IN ('foo', 'bar', 'baz'))