Tema SQL
IF() (MySQL / MariaDB)
Función condicional binaria: si la condición es verdadera devuelve el segundo argumento, si no el tercero. Sintaxis compacta frente a CASE simple cuando solo hay dos ramas.
Descripción
IF(condición, valor_si_verdadero, valor_si_falso) evalúa la condición como en un WHERE (0/falso vs no cero/verdadero según contexto). Es propia de MySQL/MariaDB; en SQL estándar se prefiere CASE WHEN … THEN … ELSE … END, que es portable y más legible en ramas múltiples. IF puede anidarse pero se vuelve difícil de mantener; para varias condiciones encadenadas suele ser más claro CASE. Ten cuidado con tipos de retorno: ambas ramas deberían ser compatibles para evitar conversiones implícitas extrañas. En consultas generadas dinámicamente, IF es cómoda, pero en código revisado por equipo CASE suele alinearse mejor con estilo SQL estándar.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
IF(condición, valor_si_verdadero, valor_si_falso)
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Condición
- Expresión booleana o numérica interpretada como predicado.
- Ramas
- Exactamente dos valores de retorno; para más opciones usa CASE.
- Portabilidad
- Sustituye por CASE para PostgreSQL, SQL Server u Oracle.
Ejemplos
Ejemplo 1
SELECT nombre,
IF(edad >= 18, 'Adulto', 'Menor') AS tipo
FROM personas;
Ejemplo 2
SELECT producto,
IF(stock > 0, 'disponible', 'agotado') AS estado
FROM inventario;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.