Чтобы попытаться выделить ошибку, я бы попробовал. Проверьте, может ли он соответствовать Location.BusID = MD.BusID.
SELECT MD.*, Contact.FirstName
FROM MerchantData MD
JOIN Merchant M ON M.MerchID = MD.MerchID
JOIN Location On Location.BusID = MD.BusID
Вы не используете *, поэтому используйте
SELECT TOP 1 Location.BusID FROM Location WHERE Location.BusID = MD.BusID
Как только синтаксис заработает.
Вы знаете, что после того, как вы получите эту работу, она будет соответствовать только первой строке, а затем проверит, удалена ли она. Проблема в том, что без порядка по «первой» строке произойдет произвольно. Даже с кластеризованным индексом для таблицы не существует гарантированной сортировки без предложения order by. Чтобы получить повторяемый ответ, вам нужна сортировка. Но если вы сортируете и хотите только верхний ряд, то MAX или MIN и группа будут более прямыми.
Если вы хотите, чтобы бизнес имел одно или несколько удаленных местоположений, то должны работать следующие правила, но вам нужно разбить столбцы для группы по. Если два удаленных местоположения имеют различное имя контакта, оно сообщит о каждом. Так что это может быть не то, что вы ищете.
SELECT MD.col1, MD.col2, Contact.FirstName
FROM MerchantData MD
JOIN Merchant M ON M.MerchID = MD.MerchID
JOIN Location L
ON L.BusID = MD.BusID
AND L.Deleted = 0
JOIN Contact ON Contact.ContactID = L.PrincipalID
GROUP BY MD.col1, MD.col2, Contact.FirstName