NULL no es FALSO: la lógica trivaluada de SQL
a OR NOT a es una tautología sobre dos valores, y el motor lo demuestra en las dos filas. En SQL, donde a puede ser NULL, la misma expresión es NULL, y una cláusula WHERE descarta la fila. NULL es un tercer valor, no una grafía de FALSO.
La comprobación de abajo es la de dos valores: a OR NOT a se cumple en todas las filas, hay dos filas, y la comprobación de contradicción encuentra el testigo a = FALSO en el que la fórmula es VERDADERA. Esa es toda la historia en la lógica booleana, y es la historia que cuenta el motor, porque su semántica tiene exactamente dos valores.
La lógica trivaluada de SQL añade NULL, que significa desconocido. NOT NULL es NULL; NULL OR NULL es NULL; así que a OR NOT a es NULL cuando a lo es. Las reglas del operando conocido siguen aplicándose, NULL OR TRUE es VERDADERO y NULL AND FALSE es FALSO, y por eso una condición a veces funciona en filas NULL y a veces las excluye en silencio. WHERE conserva solo las filas VERDADERAS, así que una condición NULL se comporta como FALSO ahí, mientras que las restricciones CHECK aceptan NULL como aprobado; la misma expresión, dos resultados.
La exportación a SQL del motor no finge lo contrario. Su plantilla de guarda marca cualquier fila con una entrada NULL como invalid_input y rellena las columnas de salida solo para las filas cuyas entradas son todas booleanos no nulos, y su cabecera prohíbe envolver los fragmentos en COALESCE(…, FALSE), que elegiría un significado que la regla nunca enunció. La página del lenguaje SQL describe la exportación.
always_true := a OR NOT a · salida Tabla de verdad
| # | a | always_true |
|---|---|---|
| 0 | FALSO | VERDADERO |
| 1 | VERDADERO | VERDADERO |
Lectura en lenguaje claro
Principiantealways_true es verdadero exactamente cuando a es verdadero o a es falso (o ambas cosas).
En todos los demás casos, always_true es falso.
Sobre los operadores:
- OR (O) es inclusivo: es verdadero en cuanto al menos una parte es verdadera, también cuando lo son varias.
- NOT (NO) invierte un valor: lo verdadero pasa a ser falso y lo falso, verdadero.
Intermedioalways_true es verdadero exactamente cuando a es verdadero o a es falso (o ambas cosas).
En todos los demás casos, always_true es falso.
Avanzadoalways_true es verdadero exactamente cuando a es verdadero o a es falso (o ambas cosas) [disyunción inclusiva ∨].
En todos los demás casos, always_true es falso.
Notación formal: a ∨ ¬a
El error habitual
Probar una regla en SQL con WHERE NOT banned y concluir que los usuarios no vetados son admitidos. Los usuarios cuyo banned es NULL no son ni admitidos ni rechazados por esa cláusula; faltan en los dos conjuntos de resultados, y solo un recuento de filas lo revela.
Preguntas
¿Puedo modelar NULL en Tangibool?
No como valor. El motor tiene dos valores de verdad por diseño. Modela «desconocido» de forma explícita como una entrada aparte (banned_known AND NOT banned), y las comprobaciones de dos valores cubren entonces los tres casos con honestidad.
¿IS NOT TRUE es lo mismo que NOT?
No. x IS NOT TRUE es VERDADERO cuando x es FALSO o NULL, mientras que NOT x es NULL cuando x lo es. Los predicados IS son la forma de SQL de hacer que NULL se comporte como un valor.
Relacionado
Ejemplos resueltos
Herramientas
- Comprobador de equivalencia lógica: dos expresiones, veredicto exacto, contraejemplo
- Generador de tablas de verdad: cualquier expresión booleana, hasta 12 variables, con columnas intermedias
Véase también
- Lógica booleana en SQL: AND, OR, NOT y la trampa de NULL (lógica trivaluada)
- Una regla con un indicador NULL en SQL: por qué (a OR NOT a) no siempre es verdadera
- Una entrada sin asignar no es FALSO: asignaciones incompletas
- VERDADERO y FALSO (1 y 0): las constantes de la lógica booleana
- Ley del complemento: A·A' = 0, A+A' = 1
- De expresión booleana a Python, SQL, SMT-LIB y LaTeX
Errores comunes
Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.