Я пытаюсь создать несколько ETL от однобайтовых БД (для каждого клиента) до многопользовательской БД (для всех клиентов, или «глобальных»). В глобальной БД я пытаюсь сохранить таблицу поиска, которая идентифицирует пользователей, связанных с клиентом. Итак, у меня есть это:
Database: Global
Tables: Users and ClientUsers
Database: Client
Tables: Users
После некоторых других операций ETL я хочу очистить таблицу ClientUsers, удалив всех пользователей, которых больше нет в таблице Client.Users. Я думал, что это будет работать:
DECLARE @ClientID varchar = 'ClientA'
DELETE FROM Global.dto.ClientUsers
SELECT ClientID, UserID FROM Global.dto.ClientUsers WHERE ClientID=@ClientID
EXCEPT
SELECT ClientID=@ClientID, UserID FROM ClientA_DB.dbo.Users
Но это удаляет ВСЕ записи. Я проверил отдельные операторы select, и они возвращают то, что я ожидаю для моего первого теста, где нет ни одного, который нужно удалить. Оба оператора select возвращают один и тот же набор данных. Что для меня означает, что никакие записи не должны быть удалены. Правильно? Очевидно, мне не хватает некоторого базового понимания или нюанса о том, как работает EXISTS, потому что, похоже, все должно быть просто!
Я понимаю, что возможно сделать это, используя другие методы, но я озадачен, почему EXCEPT не работает так, как мне кажется.