Ambos serían válidos, pero desde AND
tiene mayor precedencia que OR
, significarían cosas diferentes:
- Su primera consulta entre paréntesis elegiría filas eliminadas con los tipos 3, 4, 5
- Su segunda consulta entre paréntesis seleccionaría todas las filas con los tipos 3, 5, además de las filas eliminadas del tipo 4; este es el mismo significado que en la consulta original sin paréntesis.
Puede evitar la confusión por completo utilizando el operador IN
, así:
SELECT * FROM `table` WHERE type IN (3, 4, 5) AND table.deleted = 1;
o si quisieras el segundo significado
SELECT * FROM `table` WHERE type IN (3, 5) OR (type = 4 AND table.deleted = 1)