The difference is the type of element you try to target.
Sym.getSymbol is made to call a Symbol and sym.$ is made to call an element (not a symbol).
Take a look here to know how to call an element :
In addition to what Feloxor mentions, the biggest difference between them is that the sym.getSymbol() method allows you to address the symbol timeline and access any child elements within the symbol (i.e., sym.getSymbol("symbolName").$("childElementName")), whereas sym.$("symbolName") addresses only the element that the symbol instance represents, allowing you to change element properties such as x/y position, width, height, etc. of the symbol instance on the Stage.