SqlConnection is disposed when it is finalized. This happens because it inherits from Component, which has a finalizer that calls Dispose. Finalization is one of the steps in garbage collection. Garbage collection runs non-deterministically, i.e. whenever the CLR feels like it. Garbage collection in C# is totally unrelated to an object going out of scope.
So if a SqlConnection goes out of scope, it will at some point in the future be finalized and therefore closed. This is bad because until that finalization hapens, you are wasting resources. Later in your program you might fail to open a connection because too many connections are already open (even though they are not actually in use and just waiting to be finalized).
This is why it is strongly recommended that you Dispose your SqlConnections after you have finished using them.
(Don't read this as a canonical truth of how SqlConnection finalization works. I simplified the details in order to focus on the difference between finalization and explicit disposal).