The default for smalldatetime is not Jan 1, 1900; it is NULL. Here is the proof:

DECLARE @d1 smalldatetime;SELECT @d1;

Also, setting a variable to 0 is not at all requesting to set it to the default, it is requesting to set ot to the value 0, or whatever is the result of implicitly converting 0 to the data type of the variable.

Although I will agree that knowing these things has value, I am more of the opinion of never leave anything to default, declare everything. This way the default becomes irrelevant and you are much less likely to get a surprise in your results.