Estou fazendo uma consulta DELETE ou SELECT arbitrária e sei que isso deve afetar ou retornar apenas uma linha. Como posso garantir que a consulta não seja executada e recebo algum sinal de que algo está errado quando mais de uma linha corresponde?
Usar LIMIT e ORDERBY permite que a operação continue, em vez de fazer um aborto forçado. Ou seja, vários objetos podem estar sujeitos a DELETE sem chance de recuperação.
De preferência, qualquer resultado de sinal seria diferente de ter correspondência zero.
Conforme mencionado por Arkhena, use uma subconsulta escalar para determinar a linha a ser acessada:
Se a subconsulta retornar mais de um ID, a consulta falhará. Isso requer alguma chave exclusiva (aqui: ID).
Se você não deseja obter um erro da consulta, pode usar o CTE para o filtro e, em seguida, verificar o número de linhas no CTE:
Esta instrução retornará um valor de ID somente se uma linha foi realmente excluída.