It is how a normal switch/bridge (like desktop switch) works and is mirrored by an Linux software bridge.
If it hasn’t knowledge of an MAC then it floods it to all ports. It learns MAC to port relations by watching source MACs of packets which arrive.
The standard linux bridge is pretty poor in functionality (esp. in the diagnostics department).
However with a recent brctl you can get the forwarding table including learned MACs via "brctl showmacs ", e.g.
root@dtank0:~# brctl showmacs wsbr0
port no mac addr is local? ageing timer
1 00:16:3e:7c:c4:1a no 32.21
1 0c:c4:7a:c6:e4:17 yes 0.00
1 0c:c4:7a:c6:e4:17 yes 0.00
2 12:04:0a:7c:c4:1b no 0.00
1 3c:a8:2a:9f:d1:54 no 2.04
1 e4:8d:8c:7e:4b:30 no 0.46
2 fe:04:0a:7c:c4:1b yes 0.00
2 fe:04:0a:7c:c4:1b yes 0.00
The ones with an ageing timer are learned ones.
Note that older brctl versions as well as the busybox based one doesn’t include the showmacs option.