Не имеет значения, используете ли вы соединения или подзапросы. Вы можете превратить практически любой запрос с подзапросом в запрос с объединением. Я бы пошел с тем, что является более читабельным. Иногда объединения более читабельны. Для других запросов подзапросы более читабельны. У вас не должно быть большой разницы в производительности, если вы оптимизируете оба запроса.
Одно исключение, с которым я столкнулся, - это создание коррелированного подзапроса , где выполняемый подзапрос зависит от результатов внешнего запроса. Эти типы запросов могут быть полезными, но очень неэффективными. Вы можете использовать их, когда вам нужно вычислить данные для каждой строки в запросе. В этом случае вы не можете использовать соединения.