O final do meu arquivo settings.py está com o seguinte código:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR, 'alurareceita/static'),
]
print(BASE_DIR, STATIC_ROOT, STATICFILES_DIRS)
Quando eu imprimi as três variáveis, obtive o seguinte resultado:
BASE_DIR = d:\alura\aplicacao
STATIC_ROOT = d:\alura\aplicacao\static
STATICFILES_DIR = ['D:\alura\aplicacao\alurareceita\static']
Se eu entendi direito, o STATIC_ROOT é o lugar onde são reunidos os arquivos estáticos de todas as aplicações do projeto após usarmos o comando python manage.py collectstatic. O STATICFILES_DIR apenas indica de onde o comando collectstatic vai obter os arquivos estáticos e copiar em seguida para STATIC_ROOT.
As concatenações (joins) deveriam comportar da mesma forma que você está vendo.
STATIC_ROOT referencia a pasta static FORA da pasta do projeto.
STATICFILES_DIR referencia a pasta static DENTRO da pasta do projeto.
No fringir dos ovos, os templates vão usar o caminho de STATIC_ROOT. Mas o caminho do STATIC_ROOT só será preenchido com arquivos depois do comando collectstatic, que toma como parâmetro os diretórios referenciados em STATICFILES_DIR.
Espero ter ajudado.