Block vs inline по умолчанию
div — блочный контейнер: новая строка, можно задать width/height, margin по вертикали.
span — строчный: обтекается в тексте, width/height обычно не применяются как у блока.
<div>Блок</div>
<p>Текст со <span class="hl">фрагментом</span> внутри.</p>
Семантика
Оба немые (нет смысла). Для смысла — p, em, strong, nav и т.д. CSS может сделать div inline и span block — display не определяет семантику.