I'm sure others can explain this better than I, but think of it this way. Voltage used to be known as PD- Potential Difference, and to have a difference you have to have two points. So, if we put volts into the motor shield's + and -, then yep that can come out the other side (so to speak) into the motor.
But if we need to control the gate on the shield to let that voltage through, that's where the Arduino comes in. So we "tickle" the components on the shield with an Arduino digital i/o pin, going up and down, off and on, at the behest of the code in the sketch. Easy to connect a wire, which switches between 0 and 5v under our control) from say Pin9 on the Arduino to one of the control inputs on the shield. BUT..... that wire's 5v is only known as 5v to the Arduino, since it's 5v wrt to the Arduino's ground: its 0v.
It has no meaning in volts to the shield: there's only one wire. So, we need to hook the Arduino 0v to the shield / motor 0v so that the 5v which the Arduino knows as 5v, is also seen as 5v by the shield.
HTH?