Because Visual Studio adds references to a number of common dlls when creating a new project.
EDIT: To clarify, there are two issues here - namespaces and assemblies. Namespaces represent a logical hierarchy of classes and assemblies are physical 'containers' of a collection of classes. An assembly can contain multiple namespaces and a namespace can be spread accross multiple assemblies (although this is fairly uncommon). The using directive means you don't have to fully qualify a type name e.g. you can declare List<T>
rather than System.Collections.Generic.List<T>
.
Visual studio adds references to various assemblies when creating a new project which contain a number of commonly-used namespaces such as System. If you add a using directive for a namespace contained within these assemblies then it will work, however if you need to use a namespace contained in a different assembly such as System.Web then you'll need to add the reference before the namespace can be resolved.