I guess (without knowing) you want a count of distinct users matching your regionId criterion.
You could do this.
SELECT COUNT(*)
FROM users
WHERE region IN (SELECT region FROM venues WHERE regionID = '18')
Or, you could get the number of distinct users in each region like this.
SELECT COUNT(DISTINCT users.userID) users,
region.regionID
FROM users
JOIN venues ON users.region = venues.region
GROUP BY region.regionID
I guess you have a userID column in your users table.
COUNT(*) probably won't work in a JOIN, because the result of the join operation probably contains a different number of rows than the users table itself.
This is one of those operations where it helps to know lots of SQL even to specify the result you want. Fortunately the DISTINCT keyword can help reduce large counts to smaller, and more meaningful counts.
To help with performance, you probably should add a compound index on your users table on the (region, usersID) columns. This DDL query may do that for you.
ALTER TABLE users ADD INDEX region_userID (region, usersID)
Also, on your other table, try these two
ALTER TABLE venues ADD INDEX regionID_region (regionID, region)
ALTER TABLE venues ADD INDEX region_regionID (region, regionID)
Read this: http://use-the-index-luke/
LEFT JOIN? What doesusers.regioncontain, does it match withusers.region?