te explico, cuando en un link (<a>) no coloco href, el navegador lo interpreta como marcador, así que no le asigna ni foco ni orden de tabulación (porque es una marcador, no un link como tal, se supone que no debería tener acción), en cambio si le coloco el hash (#) le indico que es un link, y para que no me redireccione a otra pagina el # es la referencia a marcadores internos.
cuando pretendes realizar acciones js en link's, muchas veces no quieres que se ejecute el href, para eso devuelvo
return false; así el href no se invoca, en este caso no abría problema, porque al ser # solamente el navegador colocaría el # en la url, pero si fuese una url que redireccione si lo haría.
es común su uso en link que requieran confirmación como:
<a href="borrar.php?id=x" onclick="return confirm('¿seguro?');">borrar x</a>
si el usuario dice cancelar al dialogo de confirmación, el href no se ejecuta, porque devuelve false