Musíme si ale uvědomit, že toto se hodí jenom pro málokterý program. Často totiž mají logické výrazy nějaké vedlejší efekty. Vezměme si jenom možnost, že v takovém výrazu voláme funkce a testujeme jejich výsledky. Tyto funkce mohou měnit nějakým způsobem stav programu - říkáme, že mají vedlejší efekty. Vzhledem k tomu, že často ani není zaručeno pořadí vyhodnocování logických výrazů, je lepší se na zkrácené vyhodnocování výrazů nespoléhat a místo něj používat vyhodnocování úplné.
Je zajímavé, že začínajícím programátorům se zdá zkrácené vyhodnocování přirozenější. Často se na něj spoléhají i při zapnutém úplném vyhodnocování. Zvláště ve spojení s ukazateli vzniká výbušná směs. Prohlédněte si následující příklad:
if (list <> nil) and (list^.next = list2) then ...
Pokud proměnná list bude nil, pak program skončí v chráněném režimu s runtime error. Je to proto, že při úplném vyhodnocování se vykoná i druhá část logického výrazu. V tomto případě pak bude tento kód šahat do paměti přes nil.