Pues mira, vamos a hacer una prueba sobre la base de tu propia tabla, conforme la posteaste.
Para el ejemplo, eliminaré las referencias a las FK, porque no posteaste las tablas, pero a los efectos de la prueba son irrelevantes.
También eliminaré ese "USING BTREE", que francamente no sé por que definiste así. Es innecesario.
Una vez creada realizaré un insert en que pondré todos los campos NOT NULL, ecepto el que te preocupa.
Primero creamos la tabla:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.33 sec)
-> PRIMARY KEY (`cod_cliente`,`nro_pedido`,`cod_articulo`,`cant_pedid`) Query OK, 0 rows affected (0.06 sec)
Código MySQL:
Ver originalmysql
> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` , `nro_pedido`, `fech_pedido`, -> `cod_articulo`, `descripcion`, `unidad`,
-> `anulado`, `pendiente`, `id_orden_carga`)
-> VALUES (1, 'loquesea', 12, NOW(), 11, 'describe articulo', 32, 'NO', 'NO', 3333);
ERROR
1364 (HY000
):
Field 'cant_pedid' doesn
't have a default value
Como se puede ver en la respuesta de MySQL, no admite la inserción porque el campo cant_pedido está definido como NOT NULL.
Ahora intentemos, poniendo NULL en ese campo:
Código MySQL:
Ver originalmysql
> INSERT INTO `pedidos` (`cod_cliente`, `razon_social` , `nro_pedido`, `fech_pedido`, -> `cant_pedid` , `cod_articulo`, `descripcion`, `unidad`, `anulado`, `pendiente`, `id_orden_carga`)
-> VALUES (1, 'loquesea', 12, NOW(), NULL, 11, 'describe articulo', 32, 'NO', 'NO', 3333); ERROR
1048 (23000):
Column 'cant_pedid' cannot be
nullmysql>
Lo que esto demuestra es que si te está permitiendo insertar un valor nulo, no está siendo por la restricción, sino que sin duda estás cometiendo algún error a otro nivel.
Yo sospecho que si estás generando el INSERT por programación, no estás mandando realmente un valor NULL, sino otra cosa, por ejemplo un espacio vacío (representado por el contenido de dos apostrofes consecutivos).
Lamentablemente si ver todo lo que estas haciendo, lo mas que puedo decirte es esto. El error no está en el tipo de campo. Está en otra parte.