A resposta é SIM.
O IF(cond,expr_true,expr_false) dentro de uma consulta mysql está em curto-circuito.
Aqui um teste, usando @variables para provar o fato:
SET @var:=5;
SELECT IF(1 = 0, (@var:[email protected] + 1), @var ); -- using ':=' operator to modify 'true' expr @var
SELECT IF(1 = 1, @var, (@var:[email protected] + 1) ); -- using ':=' operator to modify 'false' expr @var
SELECT @var;
O resultado é '5' de todas as três consultas SELECT.
Se a função IF() NÃO estivesse em curto-circuito, o resultado seria um '5' do SELECT #1, e '6' do SELECT #2, e um '7' do último "select @var".
Isso ocorre porque a expressão 'true' NUNCA é executada, no select #1 e nem a expressão false é executada no select #2.
Observe que o operador ':=' é usado para modificar um @var, dentro de uma consulta SQL (cláusulas select,from e where). Você pode obter um SQL realmente sofisticado/complexo com isso. Eu usei @vars para aplicar lógica 'procedural' em uma consulta SQL.
-- J Jorgenson --