Вам нужно использовать псевдонимы таблиц при объединении таблиц с одинаковыми именами, если не они сами:
SELECT a.*, b.*
FROM AssetCompType_EquipmentProperty_LinkTable a
RIGHT OUTER JOIN [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b ON a.AssetCompTypeID = b.AssetCompTypeID
Это необходимо только для синтаксиса JOIN, но также потому, что вы не можете использовать SELECT *
из-за вероятности одинаковых столбцов в таблицах.
Тем не менее, чтобы получить желаемый результат, вы должны рассмотреть:
Использование NOT IN
SELECT b.*
FROM [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b
WHERE b.AssetCompTypeID NOT IN (SELECT a.AssetCompTypeID
FROM AssetCompType_EquipmentProperty_LinkTable a)
Использование NOT EXISTS
SELECT b.*
FROM [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b
WHERE NOT EXISTS (SELECT NULL
FROM AssetCompType_EquipmentProperty_LinkTable a
WHERE a.AssetCompTypeID = b.AssetCompTypeID)
Использование LEFT JOIN/IS NULL
SELECT b.*
FROM [database A].dbo.AssetCompType_EquipmentProperty_LinkTable b
LEFT JOIN AssetCompType_EquipmentProperty_LinkTable a ON a.AssetCompTypeID = b.AssetCompTypeID
WHERE a.AssetCompTypeID IS NULL
Заключение
Из трех вариантов NOT IN
и NOT EXISTS
эквивалентны - LEFT JOIN / IS NULL менее эффективен. Подробнее см. в этой статье .