У вас могут быть серьезные проблемы с производительностью из-за мертвых блокировок
SELECT получит общую блокировку на странице, а затем DELETE попытается обновить эти блокировки до эксклюзивных блокировок.
Если другой пользователь выполняет тот же запрос, он может получить общие блокировки на той же странице в то же время, что и другой пользователь. Затем, когда кто-то пытается перейти на эксклюзивную блокировку, он будет ожидать освобождения всех других общих блокировок. Другой также будет ожидать освобождения всех общих блокировок. Оба будут иметь общую блокировку и ожидают, пока другая освободит эту общую блокировку, чтобы сама могла получить эксклюзивную блокировку. Другие запросы будут накапливаться при попытке сделать то же самое, и вскоре начнут обнаруживаться взаимоблокировки, и запросы начнут отменяться и откатываться. В зависимости от частоты запросов обнаружение мертвой блокировки механизма БД может не убивать запросы так быстро, как приходят новые, то есть ни один из запросов не будет выполнен успешно.
Вам нужно будет добавить что-то вроде подсказки в select, чтобы запросить получение эксклюзивной блокировки с самого начала. Или вы можете переместить селектор за пределы транзакции и использовать обнаружение конфликта параллелизма в критериях где ваш другой оператор.