мне кажется, что в первом варианте у нас хоть и 2 запроса, но мы получили список тагов товара и сразу получаем список товаров этих тагов
в варианте с EXISTS подзапрос для каждой записи товара будет разным и интуитивно есть подозрения, что может работать медленнее, мягко говоря
думаю EXISTS это на случай, когда мы фильтруем по принципу того, что нам достаточно чтобы справа оператора была хотя бы одна запись (чтобы не искать все записи)
Результат IN и EXISTS будет один. Но я с тобой согласен, способ достижения результата (скорость) может очень сильно разниться, при чем на одной и той же структуре, но при разных данных и настроек СУБД. Так что, надо смотреть в каждом случае, если это вообще критично (микрооптимизация не всегда хорошо)