Hai chiesto "quanto male". Quindi, per dare un tocco di pietà alla risposta di RobertKoritnik (del tutto accurata) ...
Quel codice non è corretto. Non corretto non viene in sfumature di grigio. Questo codice viola lo standard ed è quindi errato. Fallirebbe il controllo della validazione, e dovrebbe.
Detto questo, nessun browser attualmente sul mercato si lamenterebbe di questo, o avrebbe avuto alcun problema con esso. I browser sarebbero nei loro diritti lamentarsi di ciò, ma nessuna delle versioni correnti di nessuno di essi attualmente lo fa. Ciò non significa che le versioni future potrebbero non trattare male questo codice.
Il tuo comportamento nel provare a utilizzare quell'ID come selettore, sia in css che in javascript, non è percettibile e probabilmente varia da browser a browser. Suppongo che si possa fare uno studio per vedere come reagisce ogni browser. Penso che nel migliore dei casi lo tratterebbe proprio come "class=", e selezioneremo la lista. (Ciò potrebbe confondere le librerie JavaScript, anche se - se fossi l'autore di jQuery, avrei potuto ottimizzare il mio codice di selezione in modo che se vieni da me con un selettore che inizia con "#", mi aspetto un singolo oggetto e ottengo un la lista potrebbe bloccarmi completamente.)
Potrebbe anche selezionare il primo, o forse l'ultimo, o selezionare nessuno di essi, o bloccare completamente il browser. Non c'è modo di dirlo senza provarlo.
"Quanto male" dipende interamente da quanto rigorosamente un particolare browser implementa le specifiche HTML e da ciò che fa quando si confronta con una violazione di tale specifica.
EDIT: mi è appena capitato di imbattermi oggi. Sto inserendo vari componenti dai moduli di ricerca su vari tipi di entità per produrre una grande utility di reporting all-in-one per questo sito, sto caricando i moduli di ricerca delle pagine remote in div nascoste e inserendole nel mio Generatore di report quando il tipo di entità appropriato è selezionato come origine per il report. Quindi c'è una versione nascosta del modulo e una versione visualizzata nel generatore di report. Il codice JavaScript fornito, in tutti i casi, fa riferimento a elementi per ID, di cui ci sono ora DUE sulla pagina, quella nascosta e quella visualizzata.
Ciò che sembra fare jQuery è selezionarmi il PRIMO, che in tutti i casi è esattamente quello che NON VOGLIO.
Ci sto lavorando attorno scrivendo i selettori per specificare la regione della pagina in cui voglio inserire il mio campo (es: $ ('# containerDiv #specificElement')). Ma c'è una risposta alla tua domanda: jQuery su Chrome si comporta in modo particolare in caso di violazione di questa specifica.