Hola a todos:
Vayamos por partes... estamos olvidando que en BD un campo nulo NO ES LO MISMO QUE UNA CADENA VACIA, es decir, no es lo mismo poner correo = '' a poner correo = null. observen este script:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.19 sec)
-> ('dos', ''), ('tres', NULL); Query OK, 3 rows affected (0.03 sec)
+--------+-------------+
| nombre | correo |
+--------+-------------+
| dos | |
+--------+-------------+
+--------+--------+
| nombre | correo |
+--------+--------+
| dos | |
+--------+--------+
+--------+--------+
| nombre | correo |
+--------+--------+
+--------+--------+
+--------+--------+
| nombre | correo |
+--------+--------+
| dos | |
+--------+--------+
Si observan en el insert en un caso estoy asignando '' al correo, mientras que en otro envío la palabra reservada NULL, en los select's que están debajo se observa entonces los diferentes comportamientos, finalmente la última consulta con la cláusula OR traería todos los registros que tengan asignado una cadena vacía ('') o un valor nulo (NULL)
Saludos
Leo.