SetVelocity is implemented differently for different physics engines. Gazebo is compatible with several core physics engines: ODE, Simbody, Bullet, and DART. However, only ODE and Bullet are available in 1.9, and in all versions ODE is the default. Joint is actually an abstract class, and there's a different implementation for the different physics engines. There are also different implementations for the different kinds of joints (hinge, prismatic, etc.). To find the implementation of SetVelocity, look in folder gazebo/physics/ode/ for ODEJoint and ODEHingeJoint (since it sounds like you are using a rotating hinge joint).
As you can see if you read the source code, there is no PID control in the background for SetVelocity. There is a PID class that computes PID math for you, which you could try using for PID velocity control.