N'avez-vous pas oublié de faire un "SINON" dans l'instruction case ?
UPDATE my_table
SET field = CASE
WHEN id IN (/* true ids */) THEN TRUE
WHEN id IN (/* false ids */) THEN FALSE
ELSE field=field
END
Sans le ELSE, je suppose que la chaîne d'évaluation s'arrête au dernier QUAND et exécute cette mise à jour. De plus, vous ne limitez pas les lignes que vous essayez de mettre à jour ; si vous ne faites pas le ELSE, vous devez au moins indiquer à la mise à jour de ne mettre à jour que les lignes souhaitées et non toutes les lignes (comme vous le faites). Regardez la clause WHERE ci-dessous :
UPDATE my_table
SET field = CASE
WHEN id IN (/* true ids */) THEN TRUE
WHEN id IN (/* false ids */) THEN FALSE
END
WHERE id in (true ids + false_ids)