これは、最初のケースで請求書のすべての値に対してWHERE句がtrueと評価されるため( IDが34のベンダーが存在する)、ID = -34の場合はすべてのレコードが更新され、その逆も同様です。VendorID=のため、レコードは更新されません。 -34は常にfalseです。
たとえば、請求書I {... does not matter ... }
とベンダーを設定したとしV.VendorIDs {1 .. 35}
ます。
set PaymentTotal = 1 when VendorID=34 exists
-- 34 exists so this is executed
set PaymentTotal = 1 when VendorID=-34 exists
-- -34 does not exists so this is never executed
これらは無関係なセット間のセット操作であるため、結果は期待されません(このタイプの分析を行わない限り)。
それらを関連付けると(以下のクエリのように)、このロジックが変更され、「期待される」結果が得られます。
私はあなたがこれらの線に沿って何かを望んでいると信じています:
UPDATE Invoices
SET PaymentTotal = 1
FROM Vendors
WHERE Vendors.VendorID = 34 and Invoices.VendorID = Vendors.VendorID
...そして私はあなたが実際にVendorIDを知らないが、このクエリが意味をなすような別のVendorフィールドを知っていると仮定しています(IDをすでに知っている場合は別のテーブルをクエリする意味がないため)。