Может ли запрос SELECT приводить к удалению данных?
склоняюсь к мнению, что это глюк на самом сервере SQL. 
всякий раз, когда ты склоняешься к такому мнению, это значит что глюк 100% в твоем собственном коде. 

Учитывая весь этот адов винегрет, от которого глаза начинают кровоточить, удивительно что оно вообще хоть как-то работает. 

Но в целом, главная твоя проблема состоит в том, что ты уникальный идентификатор считаешь цыферкой. которую можно складыавть, умножать, делить. А это не так. 
Выкини всю эту арифметику, и всегда удаляй только ту строку, ид которой ты получил по ссылке.
Я не специалист в MySQL но обычно транзакция заканчивается командой commit.
Проверь где ты явно завершаешь (фиксируешь транзакцию) или у тебя в свойствах соединения должен быть включен авто-коммит. Хотя авто-коммит это плохой вариант если ты удаляешь много строк.