A sub-interface is treated as a separate logical interface representing a VLAN or PVC (depending on the interface type).
A secondary address is just another address label on the same interface. It is mostly used to permit a smooth address transition from one address block to another.
With a subinterface, each logical interface can have QOS and queuing applied as if it were a separate physical interface. With a secondary address, you are constrained to the parameters set on the physical interface.
Routing protocols will handled the two differently (poorly on the secondary addresses interfaces).
Aside from the convenience of changing address blocks, secondary addressing is generally an Evil Thing that should be avoided. Improperly used, it could destroy all life as we know it on the face of the Earth (probably "a Bad Thing"). I spit on secondary addressing. It's not Our Friend.
Aside from some caveats with split horizon / poison reverse, sub-interface addressing makes Network Admin life easier and more ordered. Flowers grow and birds sing everywhere sub-interfaces are properly used. It's a Good Thing. Sub-Interfaces are our Friend, especially in the Frame-Relay environments and Ethernet VLANs / Trunks.
I hope this helps to clarify your understanding.
FWIW
Scott