Usted preguntó "qué tan malo". Así que para dar un poco de respuesta a Robertbertoritnik (completamente precisa) ...
Ese código es incorrecto. Incorrecto no viene en tonos de gris. Este código viola el estándar y, por lo tanto, es incorrecto. Fallaría la verificación de validación, y debería.
Dicho esto, ningún navegador actualmente en el mercado se quejaría o tendría algún problema. Los navegadores tendrían derecho a quejarse al respecto, pero ninguna de las versiones actuales de ninguno de ellos lo hace actualmente. Lo que no significa que las versiones futuras no traten mal este código.
Su comportamiento al tratar de usar esa ID como selector, ya sea en CSS o JavaScript, es incuestionable y probablemente varía de un navegador a otro. Supongo que se podría hacer un estudio para ver cómo reacciona cada navegador a eso. Creo que en el mejor de los casos, lo trataría como "clase =" y seleccionaría la lista de ellos. (Sin embargo, eso podría confundir a las bibliotecas de JavaScript; si yo fuera el autor de jQuery, podría haber optimizado mi código de selector para que si vienes a mí con un selector que comienza con "#", espero un solo objeto y obtengo un la lista podría molestarme por completo).
También puede seleccionar el primero, o posiblemente el último, o no seleccionar ninguno de ellos, o bloquear el navegador por completo. No hay forma de saberlo sin probarlo.
"Qué tan malo" depende entonces de cuán estrictamente un navegador en particular implemente la especificación HTML y lo que haga cuando se enfrente a una violación de esa especificación.
EDITAR: Acabo de encontrar esto hoy. Extraigo varios componentes de los formularios de búsqueda en varios tipos de entidades para producir una gran utilidad de informes todo en uno para este sitio, estoy cargando los formularios de búsqueda de las páginas remotas en divs ocultos y los inserto en mi generador de informes cuando se selecciona el tipo de entidad apropiado como la fuente del informe. Entonces, hay una versión oculta del formulario y una versión que se muestra en el generador de informes. El JavaScript que viene con, en todos los casos, se refiere a elementos por ID, de los cuales ahora hay DOS en la página: el oculto y el que se muestra.
Lo que parece estar haciendo jQuery es seleccionarme el PRIMERO, que en todos los casos es exactamente el que NO quiero.
Estoy trabajando en esto escribiendo selectores para especificar la región de la página en la que quiero obtener mi campo (es decir: $ ('# containerDiv #specificElement')). Pero hay una respuesta a su pregunta: jQuery en Chrome definitivamente se comporta de una manera particular cuando se enfrenta a esta violación de especificaciones.