Причина 1. Идеологическая причина

Псевдо-протокол javascript: давно устарел. Он поддерживается браузерами, но не описывается в веб-стандартах.

Впрочем, с другой стороны, на использовании javascript: построен ряд интересных технологий, например букмарклеты.
Причина 2. Отсутствие деградации

Ссылка через <a href="javascript:..."> не будет работать у пользователей без javascript.

Если это возможно, лучше сделать такой вариант:

<a href="/openComment.php?id=123" onclick="openComment(123); return false">
открыть комментарий
</a>

Те посетители, у которых javascript отключен, пройдут по ссылке на /openComment.php?id=123 и таки увидят там что-то полезное.

Поисковики тоже проиндексируют /openCommend.php?id=123.

Если ничего подобного такой страничке сделать нельзя, например, ссылка должна запускать AJAX-запрос, то не надо писать:

<!-- плохо -->
<a href="#" onclick="ajax();return false">
запусти меня
</a>

При нажатии на такую ссылку с отключенным javascript, человека кинет на начало страницы. Не есть гуд. Но какой-то href должен быть. Поэтому лучше сделать так:

<!-- хорошо -->
<a href="/nojs.html" target="_blank" onclick="ajax();return false">
запусти меня
</a>

Страница /nojs.html может, например, содержать просьбу включить javascript.
Причина 3. Недостатки интеграции

Свойством onclick гораздо удобнее управлять из javascript. Оно задает обработчик события. Можно делать несколько обработчиков, назначить функцию а не строку как в href, и т.п.

А псевдо-протокол javascript: - не событие. Он выпадает из общей схемы и потому неудобен.

P.S Строго говоря, и onclick внутри HTML не следует указывать. Отдельно должны идти разметка и javascript-код. Но иногда onclick - это удобно, так почему же нет..
Причина 4. Отрицательное юзабилити

Очень часто используют скрипт в ссылке, когда по клику нужно открыть картинку или описание продукта.

Так вот многие открывают эту ссылку в новой вкладке браузера и получают в адресе страницы "javascript:showPopup(27);", а не то, что они хотели увидеть.
Позитивное применение?

Если все же хочется, чтобы по клику на ссылку у посетителя с отключенным javascript ничего не произошло:

<a href="javascript:void(0)">...</a>

Источник: Почему <a href="javascript:..."> - плохо