Действительно простое объяснение, когда происходит Dead Lock (когда я ошибся, извините, я не администратор базы данных :)):
Обе транзакции выполняются параллельно
Транзакция 1
Выбрать * Из Таблицы1
Выберите * из таблицы2
Транзакция 2
Выбрать * Из таблицы2
Выбрать * из таблицы1
T1 ожидает Table2, а T2 ждет Table1
Одной из оптимизаций является выполнение операторов SQL в том же порядке.
В MSSQL Sever есть опция с nolock, но там у вас есть множество несоответствующих данных.