
Ivan Sevilla
PreguntaTiene sentido poner NOT NULL y default en una misma columna? Porque segun entendido NOT NULL no permite que enviamos el dato de la columna vacío, entonces para que serviría dejar un dato como default si no lo vamos a usar. Es asi? o como funciona?

Cono Damian Pereyra Santana
Si tiene sentido, a continuación te mencionare un ejemplo practico:
Escenario: Supongamos que tengo un sistema de emisión de facturas automáticas y a su vez cuento con un ABM que me permite generarlas de manera manual (para el caso de aquellas que no pasan por la facturación automática).
En ambos casos es mandatario completar la fecha de la factura, ya que en algún momento la misma se emitió y seria una inconsistencia si no contase con ese dato.
Caso de uso 1 - En el sistema automático, la factura se emite en tiempo real por consiguiente no es necesario determinar la fecha de facturación ya deberá tomar la fecha del día actual, para ello impacta el valor default de la tabla y no lo debería mencionar en la sentencia insert.
INSERT INTO 'facturas' ('monto','cliente') VALUES ('175.45',3)
Caso de uso 2 - En el ABM de carga manual me permite cargar facturas con cualquier fecha... que puede ser la actual como de días anteriores... la única salvedad es que SI o SI es necesario la carga de dicho valor ya que es mandatario según la definición del escenario, asi que en este caso si sera necesario la mención de la columna.
INSERT INTO 'facturas' ('monto','cliente','fecha') VALUES ('200.50',1,'2020-08-21')
Conclusión: Para este ejemplo es necesario que la columna fecha este definida con valor por default y al mismo tiempo sea NOT NULL, ya que previene un hipotetico insert de este formato
INSERT INTO 'facturas' ('monto','cliente','fecha') VALUES ('200.50',1,NULL)
que según el caso es una restricción del escenario.
Osvaldo Garcia
si.
por ejemplo cuando estas programando un crud y necesitas hacer inserciones, hay valores que no se pueden simplemente desechar, como el estatus de algo. Asi que es muy conveniente tener un valor por default cuando existen estos casos y el usuario no "inserta" los valores correspondientes, previniendo el error del not null.

Germán Alejandro Niño
Puede tener sentido en cuanto el NOT NULL bloquea que en cualquier instancia puedas insertar un NULL en la tabla, el DEFAULT actua si no insertas nada.