В качестве хорошей конструкции, если для правильной работы столбца требуется значение, оно должно быть объявлено NOT NULL.
Это, как практическое дело, объявление столбца автоинкремента как обнуляемого означает, что вы можете передать ему пустое значение и все равно получить значение, генерируемое для столбца.
http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
С точки зрения повышения эффективности и пространства, это лучше сделать столбец UNSIGNED, так как он никогда не будет принимать отрицательное значение, и использовать наименьший тип данных, который будет идти в ногу с размером стола.
По определению все ограничения столбцов налагают определенное влияние на производительность, поскольку сервер должен выделять ресурсы для хранения и проверки ограничений.
Но это мелочь, особенно для чего-то рутинного, например, для проверки нулевых значений, и опять же, это стоит того, если оно обеспечивает достоверность в ваших записях.
Это интересный вопрос, который вы могли бы сослаться на это: http://stackoverflow.com/questions/3503089/mysql-why-not-null-add-to-primary-key-field –
А, так оно и есть первичный ключ, NOT NULL автоматически принимается? – eggbertx