Ja das ist der Fluch der Automatismen.
Der Specific-Name dient zur Benennung des generierten Objektes und zu sonst nichts.
Bei langen Namen generiert SQL ansonsten den Systemnamen selber.
Im Gegensatz zu Feldern und Tabellen ist der Specific-Name nicht im SQL-Kontext verwendbar.
D.h., dadurch dass du in SQL jedes vorhandene Programm per CALL aufrufen kannst, wird deine SQL-Prozedur mittels "CALL PROGRAM" aufgerufen.
Dies ist das selbe, als wenn du das Programm per CALL aus RPG aufrufst.
SQL spielt da nicht mit.
Eine SQL-Prozedur muss mit ihrem originären Namen aufgerufen werden und zwar so wie sie in SYSPROCS unter ROUTINE_NAME eingetragen ist.
Wird sie dort nämlich nicht gefunden, wird ein Programm-Call daraus.
Nun führt dies nicht zu Fehlern, da die SQL-Prozeduren in "C" erstellt werden und daher automatisch mit 0-N Parametern aufgerufen werden (Ähnlich wie halt RPGLE).
Erst beim Zugriff auf die fehlenden Variablen würde ein MCH ausgelöst.

Wenn du eine externe Prozedur im SQL-Stil erstellst, erhältst du zusätzliche Übergabeparameter für z.B. eine SQLCODE-Rückgabe. Greifst du nicht darauf zu gibt's auch keinen Laufzeitfehler.
Machst du die Prozedur im Stil "General" sind nur die Funktionsparameter deklariert und dann merkst du keinen Unterschied zwischen SQL-Prozedur-Aufruf und SQL-Programm-Aufruf.