Je suppose que parce que vous nous avez montré un schéma simplifié, il manque certaines informations qui détermineraient pourquoi les valeurs VarietyID répétées pour un OrderID donné.
Lorsque vous avez plusieurs lignes, SQL Server en choisira arbitrairement une pour la mise à jour.
Si tel est le cas, vous devez d'abord grouper
UPDATE V
SET
Stock = Stock - foo.SumQuantity
FROM
tblVariety V
JOIN
(SELECT SUM(Quantity) AS SumQuantity, VarietyID
FROM tblOrderItem
JOIN tblOrder ON tblOrderItem.OrderId = tblOrder.OrderId
WHERE tblOrder.OrderId = 1
GROUP BY VarietyID
) foo ON V.VarietyId = foo.VarietyId
Si ce n'est pas le cas, la table OrderItems PK est erronée car elle autorise les combinaisons OrderID/VarietyID en double (la PK doit être OrderID/VarietyID, ou celles-ci doivent être contraintes uniques)