I have been asked by many people why subnet zero should not be used. While the latest RFC's have relaxed the use of subnet zero, it is still a dangerous practise if you dont know what you are doing. If subnet zero is used, confusion can occur in the routing tables.
Lets look at an example.
Take a class B address of 150.1.0.0. This is the network address. If we use a class C subnet mask of 255.255.255.0 then the first valid subnet is 150.1.1.0. However, if we allow subnet zero, then the first subnet would be 150.1.0.0 which is identical to the network address - hence where the cinfusion starts.