Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

309
Vistas
¿Cuál es la diferencia entre `flag is TRUE` y `flag = TRUE` en MySQL?

Ejecuté las siguientes consultas en MySQL:

 SELECT * from table WHERE valid is TRUE ORDER BY priority DESC limit 10 offset 0;

Tiempo empleado = 1 segundo.

contra

 SELECT * from table WHERE valid = TRUE ORDER BY priority DESC limit 10 offset 0;

Tiempo empleado = 66 ms.

Tengo índices en (válido, prioridad) y (válido). ¿Por qué hay una diferencia tan grande? ¿Cuál es la diferencia entre es VERDADERO y = VERDADERO ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Según el Mysql Doc para el operador IS

ES valor_booleano

Prueba un valor con un valor booleano, donde boolean_value puede ser VERDADERO, FALSO o DESCONOCIDO.

En SQL, un valor_booleano, ya sea VERDADERO, FALSO o DESCONOCIDO, es un valor de verdad. Cuando se usa el operador IS, el valor con el que se está probando debe expresarse/emitirse como uno de estos valores de verdad, y luego se evalúa la expresión.


En tu primera consulta:

SELECT * from table WHERE valid is TRUE ORDER BY priority DESC limit 10 offset 0;

según el tipo de datos de la columna válida, el valor real se evalúa para cada fila, lo que daría como resultado un análisis completo de la tabla, por lo que vería tiempos más altos.


En tu segunda consulta:

SELECT * from table WHERE valid = TRUE ORDER BY priority DESC limit 10 offset 0;

cuando usa el operador =, está comparando la columna válida con Boolean Literal TRUE, que es solo una constante de MySQL para 1.

over 4 years ago · Santiago Trujillo Denunciar

0

Hay una diferencia muy importante:

  • IS TRUE solo verdaderos "verdadero" o "falso"

  • = TRUE puede devolver NULL .

En particular, NULL IS TRUE devuelve "falso".

En realidad, esto no es tan importante para IS TRUE . Es una diferencia sustancial para IS NOT TRUE versus NOT o <> true .

Eso IS TRUE y IS NOT TRUE es "NULL-safe":

 where NULL IS NOT TRUE --> evaluates to true and all rows are returned where NOT NULL --> evaluates to NULL and no rows are returned where NULL <> TRUE --> evaluates to NULL and no rows are returned

El NULL aquí podría ser una expresión que devuelve valores NULL .

Esta semántica se explica claramente en la documentación .

over 4 years ago · Santiago Trujillo Denunciar

0

Hay una diferencia semántica entre los dos.

  1. El operador IS sirve como una forma de probar contra un cierto valor si es verdadero, falso o desconocido.

De la documentación: IS boolean_value

Prueba un valor con un valor booleano, donde boolean_value puede ser VERDADERO, FALSO o DESCONOCIDO.

mysql> SELECCIONE 1 ES VERDADERO, 0 ES FALSO, NULL ES DESCONOCIDO; -> 1, 1, 1

Para el operador "=", es simplemente una forma de equiparar algo para comparar. En su consulta, está utilizando valid para establecerse en True.

Entonces, dependiendo de su caso de uso, usaría los operadores. En su consulta actual, parece que hacen lo mismo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda