¿Es este un nuevo patrón común en Oracle donde existe (seleccione NULL FROM ...)?

8

Hace años, era común escribir

where exists (Select * from some_table where some_condition)

El año pasado noté que muchos scripts de t-sql cambiaron a usar el número 1 en lugar de la estrella

where exists (Select 1 from some_table where some_condition)

solo en SO vi este ejemplo de Oracle

WHERE EXISTS (SELECT NULL FROM ...

¿Es este un patrón común con Oracle? Y cuáles son los argumentos de rendimiento para usar algo como esto.

bernd_k
fuente
2
SO tiene una discusión de esto. stackoverflow.com/questions/424212/…
Leigh Riffel

Respuestas:

6

Respuesta corta: ¡espero que no!

Incluso el SELECT 1idioma puede haber sobrevivido a su utilidad, ya que los motores de base de datos han avanzado lo suficiente como para reconocer que realmente no quieres las filas, solo quieres saber si las filas existen. Observé los planes de ejecución en SQL 2005 y, en general, los he visto reescritos como combinaciones, incluso cuando SELECT *se usan.

Larry Coleman
fuente
5

En Oracle no importa el rendimiento sabio. Incluso puede poner 1/0 allí y la declaración no devolverá un error de división por cero porque la expresión no se evalúa.

Leigh Riffel
fuente
1
¿Es necesario cerrar esto a favor de confiar en la pregunta SO? ¿Es este uno de esos "migrar el SO a dba.SE"?
jcolebrand