Why is it that some languages don't even have a boolean type (and uses a constant TRUE instead), but they have many other and modern types? Sometimes it can be trouble if you make a boolean and then realize it can have three different values or more, then it's going to be difficult if you have old data with the boolean variable. What are some other reasons to avoid boolean variables?Related question: https://stackoverflow.com/questions/2426000/why-didnt-c-have-a-boolean-data-type-prior-to-c99I'm thinking more of conceptual problem like undecidable cases and synchronization problems. And that a boolean often is redaundant information and therefore it can be problems and synchronization issues. For a semaphore a boolean could be good but maybe not as an instance variable for an account whether or not the account is P since that may be different in different ways one might not have thought of, for example when you realize that there are not only two mutually exclusive states for what you are modelling. 
What are the problems with boolean variables?
language agnostic;boolean
This boolean problem is not only related to programming itself. Databases have the same issue in representing boolean values. Example:Where MS Access uses -1 as true or yes like VB (see Robbie's answer), MySQL assumes that all except 0 is true. Transferring data from one database system to another or queries with keywords like true or false can result in strange things. 