La respuesta es SÍ.
El IF(cond,expr_true,expr_false) dentro de una consulta mysql está cortocircuitado.
Aquí una prueba, usando @variables para probar el hecho:
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;
El resultado es '5' de las tres consultas SELECT.
Si la función IF() NO tuviera un cortocircuito, el resultado sería un '5' de SELECT #1, y '6' de SELECT #2, y un '7' del último "select @var".
Esto se debe a que la expresión 'verdadera' NUNCA se ejecuta en la selección n.º 1 y tampoco se ejecuta la expresión falsa en la selección n.º 2.
Tenga en cuenta que el operador ':=' se usa para modificar un @var, dentro de una consulta SQL (cláusulas select, from y where). Puede obtener un SQL realmente elegante/complejo a partir de esto. He usado @vars para aplicar la lógica de 'procedimiento' dentro de una consulta SQL.
-- J. Jorgenson --