A column being NULLable does not mean that it cannot store zeros.
So the likely possibility is that the .Net program (perhaps inadvertently inserted zeros into that column). Another possibility is if the column has a default value. See id2 column in the example below. You can script the table from SSMS object explorer to see if a default value has been set up for that column.
CREATE TABLE #tmp (id1 INT, id2 INT NULL DEFAULT 0);
INSERT INTO #tmp (id1) VALUES (2);
SELECT * FROM #tmp; -- shows id1 = 2, id2 = 0
DROP TABLE #tmp