У меня были вопросы о том, какой из этих двух методов был быстрее, поэтому я написал код теста. Я создал 2 таблицы, первая из которых содержит внешний ключ ко второй. Затем я сделал миллион записей в таблице 1, и примерно половина из них сделала связанную запись в таблице 2.
Затем я запустил версию соединения и версию подзапроса. Они оба придумали одинаковые значения (хорошо).
Интересно, что он работал примерно так же: около 20 секунд на моей жалкой рабочей станции. Так что, кажется, не имеет значения, если вы делаете это так, как вы предлагали или другим способом. Если возможно, чтобы объединенная таблица имела более одного значения, я думаю, что добавление верхней 1 к подзапросу будет быстрее.
Select * From GroupInfo g Inner Join Address a
On a.Id = g.AddressId
Where Not Exists
(Select Top 1 * From GroupMembership Where GroupID = g.GroupID
And MemberID = @memberID)