En algunas plataformas (e incluso versiones), esto dependerá de cómo se indexan los NULL.
Mi regla básica para los valores NULL es:
No permita que los nulos hasta que justifica
No permita que los valores NULL a menos que los datos pueden ser muy desconocida
Un buen ejemplo de esto es el modelado de líneas de dirección. Si tiene una AddressLine1 y una AddressLine2, ¿qué significa que el primero tenga datos y el segundo que sea NULL? Me parece a mí, o bien sabes la dirección o no, y tener NULL parciales en un conjunto de datos solo pide problemas cuando alguien los concatena y obtiene NULL (comportamiento ANSI). Puede resolver esto permitiendo valores NULL y agregando una restricción de verificación: o bien toda la información de Dirección es NULA o no lo es.
Algo similar con la inicial del segundo nombre. Algunas personas no tienen una. ¿Es esto diferente de ser desconocido y te importa?
También, fecha de la muerte, ¿qué significa NULL? ¿No muerto? Fecha desconocida de la muerte? Muchas veces una sola columna no es suficiente para codificar el conocimiento en un dominio.
Así que para mí, si se debe permitir valores NULL dependería en gran medida de las semántica de los primeros de los datos - el rendimiento va a ser segundo, porque después de haber mal interpretado los datos (potencialmente por muchas personas diferentes) es por lo general un mucho más caro problema que el rendimiento.
Puede parecer una cosita (en SQL Server, la implementación es una máscara de bits almacenada con la fila), pero me parece que funcionar solo mejor que NULL después de la justificación. Capta las cosas al principio del desarrollo, te obliga a abordar las suposiciones y a comprender el dominio de tu problema.
Al menos bajo Oracle, una cadena vacía también se trata como 'NULL'. – zneak
Mi experiencia: no en MySQL. – MvanGeest
Sus ejemplos no son lo mismo. O bien el primero debe ser 'MyColumn IS NULL', o el segundo debe ser' MyColumn <> '' '. –