Si dejas el atributo href vacío pueda dar problemas en algunos navegadores, tambien puedes poner href="#", yo suelo usar javascript
:;
Pero si tu pregunta es si es normal, sí que ponga eso es normal, el navegador interpreta el código que recibe y al pasar sobre un link lo único que hace es mostrar lo que hay en el atributo href.
Diferencias entre echo y printf(), seguramente más de una, yo creo que echo es mucho más flexible y para imprimir código html directamente yo usaría echo.
Recuerda que si estás en un bucle o un if o cualquier bloque puedes hacer esto:
Código PHP:
<?php
if(1==1){
?>
<p>Código HTML</p>
<?php } ?>
Se usa más en bucles y a mi me gusta más entre otras cosas porque el editor de texto te marca el html como tal jeje