Возвращает ноль, потому что результат поиска, если элемент отсутствует в последовательности, равен нулю. Но даже с member, если он не находится в последовательности, он вернет nil:
CL-USER> (member nil '(a b c))
NIL
CL-USER>
Так что технически поиск nil в последовательности вернет nil с членом и позицией, если его там нет, что, конечно, может сбить с толку.
CL-USER> (position nil '(a b c))
NIL
CL-USER>
Разница с позицией заключается в том, что если возникнет ноль, то, как вы заметили, он вернет местоположение индекса. Find был разработан таким образом, потому что он НЕ ищет местоположение индекса, но, по сути, ищет, чтобы найти указатель на этот символ или вернуть nil. Вот почему использование позиции имеет больше смысла, как вы заметили.