Первоначально я не думал, что вам вообще нужно объединение,
;WITH n AS
(
SELECT
NameID,
rn = ROW_NUMBER() OVER (ORDER BY NameID)
FROM [Name]
WHERE TypeID = @TypeID
AND [Name] = 'Billy'
)
SELECT NameID
FROM n
WHERE rn > 1;
Опять же, может быть, у меня нет четких требований. Какова цель этого запроса?
SELECT n1.NameID
FROM [Name] AS n1
INNER JOIN
(
SELECT NameID = MIN(NameID)
FROM [Name]
WHERE TypeID = @TypeID
AND [Name] = 'Billy'
) AS n2
ON n1.NameID >= n2.NameID
WHERE n1.TypeID = @TypeID;
Я согласен с Лукасом, я не уверен, почему человек, который говорит вам изменить это, думает, что внутреннее соединение будет лучше, чем ваш оригинал.