Это работает без синтаксической ошибки, потому что 1 AND <expr>
является допустимым выражением.
Вы установили intStep для этого выражения (я добавил скобки, чтобы показать приоритет):
SET intStep = ((1 AND (fei.intDivisionId = 1)) OR (fei.intDivisionId IS NULL))
Этологическое выражение, равное 0 или 1, поэтому некоторые строки изменяются на 0, а некоторые - на 1. Оно изменяется на 0, если intDivisionId не равно 1 и если intDivisionId не равно нулю.
Я бы предположилу вас есть 96 строк в tblFormElementInstances, но только 94 из этих строк имеют совпадающую строку в tblFormElements.JOIN означает, что только соответствующие строки имеют право на UPDATE.
Попробуйте этот запрос, чтобы проверить эту теорию. Могу поспорить, он вернется 94:
SELECT COUNT(*) FROM tblFormElementInstances as fei
JOIN tblFormElements as fe using(intFormElementId)
@ Джейсон МакКрири делает хорошее замечание, что в конце у вас разбалансированные скобкивашего примера.Это должно привести к синтаксической ошибке.Поскольку вы говорите, что не получили синтаксическую ошибку, я предполагаю, что скобки включены в ваш пример по ошибке.