No sé acerca de MySQL y PostgreSQL, pero déjenme tratar esto un poco en general.
Hay un DBMS, a saber, Oracle, que no permite elegir sus usuarios entre NULL y ''. Esto demuestra claramente que no es necesario distinguir entre ambos. Hay algunas consecuencias molestas:
Establece un varchar2 en una cadena vacía como esta:
Update mytable set varchar_col = '';
lo siguiente lleva al mismo resultado
Update mytable set varchar_col = NULL;
Pero para seleccionar las columnas donde el valor está vacío o NULL, debe usar
select * from mytable where varchar_col is NULL;
Utilizando
select * from mytable where varchar_col = '';
es sintácticamente correcto, pero nunca devuelve una fila.
Por otro lado, al concatenar cadenas en Oracle. Los varchars NULL se tratan como cadenas vacías.
select NULL || 'abc' from DUAL;
rinde abc . Otros DBMS devolverían NULL en estos casos.
Cuando desee expresar explícitamente que se asigna un valor, debe usar algo como ''.
Y debe preocuparse si el recorte no está vacío da como resultado NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Lo hace.
Ahora mirando DBMS donde '' no es idéntico a NULL (por ejemplo, SQL-Server)
Trabajar con '' es generalmente más fácil y, en la mayoría de los casos, no hay necesidad práctica de distinguir entre ambos. Una de las excepciones que conozco es cuando su columna representa alguna configuración y no tiene valores predeterminados vacíos para ellos. Cuando puede distinguir entre '' y NULL, puede expresar que su configuración está vacía y evitar que se aplique el valor predeterminado.
NULL
o no