This behavior is the responsibility of the JDK's DriverManager class, not of Derby itself. You can read about the DriverManager class here: http://docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html
All Derby does is to provide a JDBC driver with the proper META-INF.
I think the DriverManager behavior may depend on the details of your CLASSPATH.
If the derby.jar in the system CLASSPATH, the automatic loading will occur. But if the derby.jar is in an container with a separate classloader, such as servlet containers, application servers, or sophisticated IDEs, aren't in the classes that are searched by DriverManager when it is initialized.