This is because the default value will be applied only when you don't insert any data into that column.
Lets look at the below table. Here FaxNo column has a default constraint with default value set to 0.
CREATE TABLE Address
(
ID INT IDENTITY(1,1),
[Name] VARCHAR(100),
FaxNo VARCHAR(100) DEFAULT 0
)
Insert some data into the Address table. In the first insert statement we are inserting NULL into FaxNo column and in second insert statement we are only inserting the Name.
INSERT INTO Address ([Name], FaxNo) VALUES ('Bob', NULL)
INSERT INTO Address ([Name]) VALUES ('James')
SELECT * FROM Address
Querying the address table will give the following output.
1 Bob NULL
2 James 0