Ambos seriam válidos, mas desde
AND
tem precedência maior que OR
, eles significariam coisas diferentes:- Sua primeira consulta entre parênteses selecionaria linhas excluídas com os tipos 3, 4, 5
- Sua segunda consulta entre parênteses selecionaria todas as linhas com os tipos 3, 5, além das linhas excluídas do tipo 4; este é o mesmo significado da consulta original sem parênteses.
Você pode evitar a confusão usando o operador
IN
, assim:SELECT * FROM `table` WHERE type IN (3, 4, 5) AND table.deleted = 1;
ou se você queria o segundo significado
SELECT * FROM `table` WHERE type IN (3, 5) OR (type = 4 AND table.deleted = 1)