Der `\caption`-Befehl aktualisiert die interne Referenz, welche von `\label` verwendet wird, also er erhöht den Tabellen- bzw. Abbildungszähler und weist ihn zu. Daher muss er *vor* `\label` stehen.
Wenn man zuerst `\label` aufruft, dann bezieht LaTeX sich auf die letzte gesetzte interne Referenz, was im angegeben Beispiel die section ist, daher liefert `\ref` hier die section-Nummer.
Eine verbreitete Praxis ist daher auch, `\label` innerhalb des `\caption`-Arguments zu schreiben. Das vermeidet ein analoges Problem, falls jemand `\caption` innerhalb einer Gruppe oder Umgebung verwendet, und hinterher `\label`, wie in (nicht empfohlenem) `{\ttfamily\caption{Text}}\label{name}` - hier "sieht" `\label` nicht mehr, was `\caption` getan hat, da dessen Wirkung durch die Gruppe `{...}` begrenzt ist, und wieder bezieht sich `\label` auf eine vorangehende Referenz.Referenz. Nur als Erklärung, warum man das sehen kann - ich würde es nicht schachteln. Zum Beispiel zeigt das Paket `showlabels` (sehr nützlich beim Entwurfs-Schreiben) das Label dann an anderer Stelle an, etwa statt im Seitenrand direkt an der Bildunterschrift.